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