给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。
返回s所有可能的回文串分割方案。
给出 s = "aab"
,返回
[
["aa", "b"],
["a", "a", "b"]
]
PS:hi,大家好,第一次写博客,有点小激动;cpp代码实现,没有自动缩进,格式好难调。。。。。。
解题思路:这一道题和之前那个wordbreak2的题很像,只是这个题更简单,不用判断前后两端是否可以被break,
因为任何情况下,它都是一定可以被break的(至少可以拆成单个的词嘛),后面的步骤就一样啦.
class Solution {
public:
/**
* @param s: A string
* @return: A list of lists of string
*/
vector<vector<string>>partition(string s){
int n = s.length();
vector<string>st;
vector<vector<string>>out;
vector<vector<int>>judge(s.length() + 1, vector<int>(s.length() + 1, 0));
dfs(s, judge, 0, st, out);
return out;
}
bool isPalindrom(string s){
int len = s.length() / 2;
for (int i = 0; i != len; i++)
{
if (s[i] != s[s.length() - 1 - i]) return false;
}
return true;
}
void dfs(string s, vector<vector<int>>judge, int k, vector<string> &st,
vector<vector<string>>& ans){
int n = s.length();
if (k>=n)
{
if (!st.empty())
{
ans.push_back(st);
}
}
for (int len = 1; len + k <= s.length(); len++){
if (isPalindrom(s.substr(k,len)))
{
st.push_back(s.substr(k, len));
dfs(s, judge, k + len, st,ans);
st.pop_back();
}
}
}
};
原文:http://www.cnblogs.com/prince-charming/p/5001722.html