问题:将一个字符串进行划分,要求划分成的子串都必须是回文串。找出所有可能的划分情况。
思路: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;
}
};

本文介绍了一种使用回溯算法来解决字符串划分问题的方法,确保每个子串都是回文串。通过递归方式检查子串是否为回文,并记录所有可能的划分方案。
171万+

被折叠的 条评论
为什么被折叠?



