【字符串】划分回文词

注意是划分回文词,不是去判断一个大串是否是回文串

大致思路:

dfs去找就好了。

·看到一个小结论:如果要求输出所有可能的解,往往都是要用深度优先搜索。如果是要求找出最优的解,或者解的数量,往往可以使用动态规划。

·这里有一个很厉害的点:字符串的反向迭代器rbegin()和rend(),见图:

所以,判断一个字符串是否是回文,只需要一句话

return s == string(s.rbegin(),s.rend());  //看s的反向是不是等于s

·注意:字符串的substr(起点,子串长度)

AC代码:

class Solution {
public:
    vector<vector<string>> partition(string s) {
        vector<vector<string>> res;
        vector<string> cur;
        dfs(res,cur,s);
        return res;
    }
    
    void dfs(vector<vector<string>> &res, vector<string> &cur, string s)
    {
        if(s=="")
        {
            res.push_back(cur);
            return;
        }
        for(int i=1;i<=s.size();i++)
        {
            string sub = s.substr(0,i);
            if(isPalindrome(sub))
            {
                cur.push_back(sub);
                dfs(res,cur,s.substr(i,s.size()-i)); 
                cur.pop_back(); //pop_back是移除vector最后一个元素,也就是移除这里加入的sub
            }
        }
    }
    
    bool isPalindrome(string s)
    {
        return s == string(s.rbegin(),s.rend());
    }
    
};

猜你喜欢

转载自blog.csdn.net/m0_38033475/article/details/92063031