Palindrome Partitioning

来源:互联网 发布:借款网站源码 编辑:程序博客网 时间:2024/06/10 01:42

回溯来做

class Solution {public:    int dp[200][200];    vector<string> v;    vector<vector<string>> vec;    vector<vector<string>> partition(string s) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(!v.empty()) v.clear();        if(!vec.empty()) vec.clear();        if(s.size()==0) return vec;        int i,j,len=s.size();        memset(dp,0,sizeof(dp));        for(i=0;i<len;i++)            dp[i][i]=1;        for(i=0;i<len-1;i++)            if(s[i]==s[i+1])                dp[i][i+1]=1;        for(i=3;i<=len;i++){            for(j=0;j+i-1<len;j++){                if(s[j]==s[j+i-1]&&dp[j+1][j+i-2]==1){                    dp[j][j+i-1]=1;                }            }        }        dfs(s,0);        return vec;    }    void dfs(string s,int x){        if(x==s.size()){            vec.push_back(v);            return;        }        for(int i=x;i<s.size();i++){            if(dp[x][i]==1){                v.push_back(s.substr(x,i-x+1));                dfs(s,i+1);                v.pop_back();            }        }    }};


原创粉丝点击