prince_charming

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

有问题可以私信我,微博地址:http://weibo.com/1683510813/profile?rightmod=1&wvr=6&mod=personinfo

题目:分割回文串

给定一个字符串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();
}
}
}
};

posted on 2015-11-27 21:01  prince_charming  阅读(531)  评论(0编辑  收藏  举报