題目描述
給定一個字符串s,分割s使得s的每一個子串都是迴文串
返回所有的迴文分割結果。(注意:返回結果的順序需要和輸入字符串中的字母順序一致。)
例如:給定字符串s=“aab”,
返回 [“aa”,“b”],↵ [“a”,“a”,“b”]
深度優先搜索思路
子在川上曰:如果要求輸出所有可能的解,往往都是要用深度優先搜索。如果是要求找出最優的解,或者解的數量,往往可以使用動態規劃。
記住這句話,超級有用。
那麼這道題的話,當然是用深度優先搜索的策略了。
先定義兩個全局變量,然後通過深度優先搜索,不斷維護這兩個vector,最後返回答案即可。
我記得前面有一篇很類似的題,leetcode每日一道(10)字符串切分爲單詞的所有可能的結果。簡直一模一樣的,只是上一篇把它看成了遞歸,這次是看成了dfs。因此這類題是一定要掌握的!關鍵時候能救命啊夥伴們!
另外還有個,如何判定迴文串,c++中有反向迭代器,可以一步到位:
bool ishuiwen(string s){
return s==string(s.rbegin(),s.rend());
代碼
class Solution {
public:
// 設置兩個全局變量
vector<vector<string>> result;
vector<string> cur;
vector<vector<string>> partition(string s) {
dfs(s);
return result;
}
bool ishuiwen(string s){
return s==string(s.rbegin(),s.rend());
}
void dfs(string s){
if (s==""){
result.push_back(cur);
return;
}
for(int i=1;i<=s.length();i++){
if (ishuiwen(s.substr(0,i))){
cur.push_back(s.substr(0,i));
dfs(s.substr(i,s.length()-i));
cur.pop_back();
}
}
}
};