首页 > 代码库 > Palindrome Partitioning

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

Palindrome Partitioning