leetcode每日一道(18)神仙思路!返回字符串所有的迴文子串切分結果

題目描述

給定一個字符串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();
            }
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章