LeetCode 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.
Example:
Input: "aab"
Output:
[
["aa","b"],
["a","a","b"]
]
给定一个字符串,把其将其进行分片,要求分完后每个部分都是回文的,找出所有可能的情况。
已经做过很多类似的题目,每次的要求都不一样,但但凡是这种把所有子串或者是所有相邻元素都考虑进来的问题,都需要使用回溯法。这次自己写的回溯法,已经和答案差不多了。现在唯一比较虚弱的是,不知道自己在写回溯的时候使用的是不是dfs,bfs。再有就是,递归调用后,某些承载着暂存任务的容器或者变量需要恢复其原来的状态。
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> ans;
vector<string> tmp;
find(ans,tmp,s,"",0);
return ans;
}
void find(vector<vector<string>> &ans,vector<string> &tmp,string s,string judge,int cur){
if(cur==s.size()){
ans.push_back(tmp);
return;
}
judge = "";//每次进来都是清空,这样才会保持每次进行判断时把单个的元素加入进来。因为是在循环中调用的,多字符会在其中考虑。
for(int i=cur;i<s.size();i++){
judge += s[i];//再递归结束后的这里,会将多字符的情况考虑进来
if(isPalinDrome(judge)){
tmp.push_back(judge);
find(ans,tmp,s,judge,i+1);
tmp.pop_back();//!!!!!!又忘记了
}
}
}
bool isPalinDrome(string a){
string b=a;
reverse(b.begin(),b.end());
return a==b;
}
};