131. 分割回文串

✅做题思路or感想

这题的主题有两个:分割字符串检查是否回文

难点在于第一点,这里用startIndex作为子串开始的地方,i作为子串结束的地方,用s.substr(startIndex, i - startIndex + 1)来分割出子串

递归单层逻辑就是判断子串是否回文,如果回文,则加入vector<string>中,否则continue

class Solution {
public:
    vector<vector<string>>result;
    vector<string>vec;
    //用双指针法来判断是否回文
    bool isGood(string s, int left, int right) {
        while (left <= right) {
            if (s[left] != s[right])return false;
            left++;
            right--;
        }
        return true;
    }
    void dfs (string s, int startIndex) {
        //当子串初始点大于主串末尾时,就结束递归
        if (startIndex >= s.size()) {
            result.push_back(vec);
            return;
        }
        for (int i = startIndex; i < s.size(); i++) {
            if (isGood(s, startIndex, i)) {
                string str = s.substr(startIndex, i - startIndex + 1);
                vec.push_back(str);
                dfs(s, i + 1);
                vec.pop_back();//回溯
            } else continue;
        }
    }
    vector<vector<string>> partition(string s) {
        dfs(s, 0);
        return result;
    }
};
posted @   北原春希  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示