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"] ]
分析:
长度为n的字符串,中间有n-1个位置可以隔断。每一次隔断都需要判断一下中间结果是否合法(是否回文),用回溯的办法解决。
本题实质还是考查DFS。
class Solution {
public:
vector<vector<string> > partition(string s) {
vector<vector<string> > result;
vector<string> output;
DFS(s,0,output,result);
return result;
}
private:
void DFS(string &s,int start,vector<string> &output,
vector<vector<string> > &result){
if(start==s.size()){
result.push_back(output);
return;
}
for(int i=start;i<s.size();i++){
if(isPalindrome(s,start,i)){//从第i位置隔一块板
output.push_back(s.substr(start,i-start+1));
DFS(s,i+1,output,result);//继续往下分隔
output.pop_back();//撤销上一个的隔板
}
}
}
bool isPalindrome(string &s,int start,int end){
while(start<end){
if(s[start++]!=s[end--])
return false;
}
return true;
}
};