其他分享
首页 > 其他分享> > 131. 分割回文串

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;
    }
};

标签:子串,分割,int,startIndex,back,131,result,回文
来源: https://www.cnblogs.com/doomaa/p/16093184.html