美文网首页
Leetcode.131.Palindrome Partitio

Leetcode.131.Palindrome Partitio

作者: Jimmy木 | 来源:发表于2019-10-29 20:39 被阅读0次

题目

给定一个字符串, 输出所有可能的子字符串, 子字符串要求是回环字符串.

Input: "aab"
Output: [["aa", "b"], ["a", "a", "b"]]

思路

首先需要一个函数判断是否是回环字符串.
然后递归分解出子字符串, 如果所有子字符串都是回环字符串, 即添加到结果.

bool isPalindrome(string &s, int start, int end) {
    while (start < end && s[start] == s[end]) {
        start++;
        end--;
    }
    return start >= end;
}


void paritionRecrution(string &s, int index, vector<string> &vec, vector<vector<string>> &res) {
    if (index == s.size() && !vec.empty()) {
        res.push_back(vec);
        return;
    }

    for (int i = index; i < s.size(); i++) {
        if (isPalindrome(s, index, i)) {
            vec.push_back(s.substr(index, i - index + 1));
            paritionRecrution(s, i + 1, vec, res);
            vec.pop_back();
        }
    }
}

vector<vector<string>> partition(string s) {
    vector<vector<string>> result;
    vector<string> cur;
    if(s.empty()) return result;
    paritionRecrution(s, 0, cur, result);
    return result;
}

总结

这个递归的过程还是比较难以理解, 从最简单的示例进行分析.

相关文章

网友评论

      本文标题:Leetcode.131.Palindrome Partitio

      本文链接:https://www.haomeiwen.com/subject/vttnvctx.html