leetcode-master/problems/0131.分割回文串.md

1.7 KiB
Raw Blame History

题目地址

https://leetcode-cn.com/problems/palindrome-partitioning/

思路

C++代码

class Solution {
private:
    vector<vector<string>> result;

    // startIndex: 搜索的起始位置vec: 放已经回文的子串
    void search(const string& s, int startIndex, vector<string>& vec) {
        // 如果起始位置已经大于s的大小说明已经找到了一组分割方案了
        if (startIndex >= s.size()) {
            result.push_back(vec);
            return;
        }
        for (int i = startIndex; i < s.size(); i++) {
            if (isPalindrome(s, startIndex, i)) { // 是回文子串
                // 获取[startIndex,i]在s中的子串
                string str = s.substr(startIndex, i - startIndex + 1);
                vec.push_back(str);
            } else { // 如果不是则直接跳过
                continue;
            }
            search(s, i + 1, vec); // 寻找i+1为起始位置的子串
            vec.pop_back(); // 回溯过程,弹出本次已经填在的子串
        }
    }
    bool isPalindrome(const string& s, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            if (s[i] != s[j]) {
                return false;
            }
        }
        return true;
    }
public:
    vector<vector<string>> partition(string s) {
        result.clear();
        vector<string> vec;
        search(s, 0 , vec);
        return result;
    }
};

更多算法干货文章持续更新可以微信搜索「代码随想录」第一时间围观关注后回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等就可以获得我多年整理的学习资料。