题意:给定一个字符串s,找出s所有的子串组合,其中每个子串都是回文串。比如所s = "cdd",应该返回[["c","d","d"],["dd"]] [["c","d","d"],["c","dd"]]。
思路:遇见这种找出所有答案的题目,一般都需要搜索(dfs或者bfs),这样便能够找出所有的可能。个人感觉递归这种东西要多做几道题才会有感觉,如果只是看的话,下次遇见还是不会,建议大家自己动手进行实现。
代码实现:
class Solution {
public:
bool isPalindrome(string s)
{
int len = s.length();
if(len <= 1)
return true;
int i = 0, j = len - 1;
while(i < j)
{
if(s[i] != s[j])
return false;
i ++;
j --;
}
return true;
}
vector<vector<string>> partition(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> temp;
vector<vector<string>> ans;
search(s, temp, ans);
return ans;
}
void search(string s, vector<string> &temp, vector<vector<string>> &ans)
{
if(s.length() == 0)
{
ans.push_back(temp);
return;
}
int len = s.length();
for(int i = 0; i < len; ++i)
{
string str = s.substr(0, i + 1);
if(isPalindrome(str))
{
vector<string> con = temp;
temp.push_back(str);
search(s.substr(i + 1, len - i - 1), temp, ans);
temp = con;
}
}
}
};