131. Palindrome Partitioning
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]
思路:回溯法,从当前的k开始到n-1,依次判断是否能组成回文。
class Solution {
bool ok(string s, int j,int k)
{
while(j<k)
{
if(s[j]!=s[k])
return false;
j++;
k--;
}
return true;
}
void dfs(vector<vector<string>>& rs,string s,vector<string>& r, int k)
{
int n=s.size();
if(k>=n)//这时已经遍历到了字符串的结尾
{
rs.push_back(r);
return;
}
for(int j=k;j<n;j++)
{
if(ok(s,k,j))//判断子字符串s(k,j)是否是回文
{
string str(s,k,j-k+1);
r.push_back(str);
dfs(rs,s,r,j+1);
r.pop_back();
}
}
return;
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> rs;
vector<string> r;
dfs(rs,s,r,0);
return rs;
}
};