Palindrome Partitioning

    又写完了一道,好开心,洗澡睡觉去~~~明天再看答案好了~

    时间只要花在了

// 进行下一次前,先将上次加入palindrome的string删掉 

if(!palindrome.empty()) palindrome.erase(palindrome.end()-1);

这句话的位置上,应该是当加入一次,进行完递归之后,将其删除。

class Solution {
public:
// 用递归的思想
// 用tmp记录字符串子串,如果tmp是回文的,则递归判断剩下的是否也是回文的,如果判断到字符串结尾,则将得到的回文vector加入到总的vector里
vector<string> palindrome;
vector<vector<string> > palindromes;
    vector<vector<string>> partition(string s) {
        recurPart(s, 0);
        return palindromes;
    }
    void recurPart(string s, int begin){
        if(begin == s.size()) {
            palindromes.push_back(palindrome);
            return;
        }
        for(int i = begin; i != s.size(); ++i){
            string tmp = s.substr(begin, i - begin + 1);
            // 如果tmp是回文的,则将其加入到palindrome里,再递归
            if(isPalindrome(tmp)){
                palindrome.push_back(tmp);
                recurPart(s, i + 1);
                // 进行下一次前,先将上次加入palindrome的string删掉
                if(!palindrome.empty()) palindrome.erase(palindrome.end()-1);
            }
        }
    }
    bool isPalindrome(string &tmp){
        string sTmp = "";
        for(int i = tmp.size() - 1; i >= 0; --i){
            sTmp += tmp[i];
        }
        if(sTmp.compare(tmp) == 0) return true;
        return false;
    }
};
原文地址:https://www.cnblogs.com/skysand/p/4039063.html