侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 131. 分割回文串

Hope
2022-02-26 / 0 评论 / 2 点赞 / 200 阅读 / 746 字
温馨提示:
本文最后更新于 2022-02-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 131. 分割回文串

思路:

先维护一个f数组,把所有的回文字符都标记出来,这样是因为回文字符是可以递归的找出来的,
第一种情况:
长度是1。
第二种情况:
两端字符相等,且中间的是回文字符,还要考虑一种特殊的情况就是只有两个字符,这样情况下,简单的判断两端以及中间(空)是不行的,这种情况是 i + 1 > j - 1。

代码:

class Solution {
public:
    vector<vector<bool>> f;
    vector<vector<string>> res;
    vector<string> path;

    vector<vector<string>> partition(string s) {
        int n=s.size();
        f = vector<vector<bool>> (n,vector<bool> (n));

        for (int j = 0; j < n; j ++ )
            // 前面的位置 是小于 后面的位置的
            for (int i = 0; i <= j; i ++ )
                if (i == j) f[i][j] = true;
                else if (s[i] == s[j]) {
                    if (i + 1 > j - 1 || f[i + 1][j - 1]) f[i][j] = true;
                }

        dfs(s,0);
        return res;
    }

    void dfs(string &s,int u){
        if(u == s.size()){
            res.push_back(path);
        }
        else{
            for(int i = u;i<s.size();i++){
                if(f[u][i]){
                    path.push_back(s.substr(u,i - u + 1));
                    dfs(s,i+1);
                    path.pop_back();
                }
            }
        }
    }
};
2

评论区