LeetCode 131 Palindrome Partitioning
阿新 • • 發佈:2018-11-07
LeetCode 131 Palindrome Partitioning
劃分字串,得到每一個子串都是迴文串,輸出所有的方案。
思路是,先將所有的迴文子串都找出來,記錄下左右端點。
然後DFS這些子串就可以了。
struct Node { string str; int l; int r; Node(){} Node(string str,int l,int r) { this->str =str; this->l =l; this->r =r; } }a[100005]; class Solution { public: int tag=0; vector<string> res; vector<vector<string>> ans; vector<vector<string>> partition(string s) { int l =s.length(); for(int i=1;i<=l;i++) { for(int j=0;j+i-1<l;j++) { if(judge(s.substr(j,i))) a[tag++]=Node(s.substr(j,i),j,j+i-1); } } dfs(0,l); return ans; } void dfs(int start,int l) { if(start == l) { ans.push_back(res); return; } for(int i=0;i<tag;i++) { if(a[i].l == start) { res.push_back(a[i].str); dfs(a[i].r+1,l); res.pop_back(); } } } bool judge(string s) { int l = s.length(); for(int i=0,j=l-1;i<j;i++,j--) { if(s[i]!=s[j]) return false; } return true; } };