问题:将一个字符串进行划分,要求划分成的子串都必须是回文串。找出所有可能的划分情况。
思路:backstrack吧,每一次只有在满足是回文的情况下深入下一层。
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > result;
vector<string> now;
if(s.size() == 0)
return result;
backtrack(s, 0, now, result);
return result;
}
void backtrack(string s, int idx, vector<string> &now, vector<vector<string> > &result)
{
int n = s.size();
if(idx == n)
{
result.push_back(now);
return;
}
for(int i=idx;i<n;i++)
{
if(isPalindrome(s, idx, i))
{
now.push_back(s.substr(idx, i-idx+1));
backtrack(s, i+1, now, result);
now.pop_back();
}
}
}
bool isPalindrome(string s, int left, int right)
{
while(left <= right)
{
if(s[left++] != s[right--])
return false;
}
return true;
}
};