Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

  [
["aa","b"],
["a","a","b"]
]

思路:

回溯,但是不是常规回溯,因为解向量大小不定,需要动态判断。 下面是我写的代码, 只用了19ms 非常快, 自己挺满意的。

感受:之前做过DP求最少切几刀令所有部分都是回文,跟这个有点像。 觉得凡是求最的都是用DP,凡是求所有解的都是用回溯。

class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> ans;
if(s.empty())
return ans; vector<vector<bool>> isPalindrome(s.length(), vector<bool>(s.length(), false));
vector<vector<int>> S(s.length(), vector<int>(, )); //每个深度候选范围 用下标范围来记录
int k = ;
vector<string> X; while(k >= )
{
while(k >= && S[k][] < s.length()) //当前深度判断完毕 通过当前范围结束下标到达s的最后
{
int i = S[k][]; //当前深度判断位置的起始下标
int j = S[k][]; //当前深度判断位置的结束下标
if(s[i] == s[j] && (j - i < || isPalindrome[i+][j - ])) //分次判断是否为回文,每次使用历史信息
{
isPalindrome[i][j] = true;
while(X.size() >= k + ) //X长度不固定,所以用的时候会有上一次求解的值,我们需要把多出的部分弹出 !!特别注意
{
X.pop_back();
}
X.push_back(s.substr(i, j - i + ));
S[k][]++;
if(S[k][] < s.length())
{
k++;
S[k][] = S[k - ][];
S[k][] = S[k - ][];
}
else
{
ans.push_back(X);
}
}
else
{
S[k][]++;
}
}
k--;
}
return ans;
}
};

随机推荐

  1. app的meta

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> < ...

  2. 大熊君大话NodeJS之------Stream模块

    一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流是可读,可写或兼具两者的. 最早接触Stream是从早期的un ...

  3. Spring、Spring MVC、MyBatis整合文件配置详解

    原文  http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...

  4. JLS(Third Edition) Chapter12 Execution

    这一章详细说明在一个program执行时,发生的activities. 它根据JVM和组成program的类.接口.实例的生命周期 组织.   一个JVM从加载一个特定的类并调用它的main方法开始启 ...

  5. SparkSql 不支持Date Format (支持Timestamp)

    最近项目中需要用到sparksql ,需要查询sql Date类型, 无奈,官方现阶段 1.6.0 还不支持Date类型,不过支持Timestamp类型,所以问题可以解决了. 1.解析 SimpleD ...

  6. ubutu之qq安装

    1.压缩包下载链接 http://pan.baidu.com/s/1nvlgsGh 2.安装教程(引用自百度经验) 如何在Ubuntu中安装QQ

  7. SQL Server 跨数据库查询

    语句 SELECT * FROM 数据库A.dbo.表A a, 数据库B.dbo.表B b WHERE a.field=b.field "DBO"可以省略 如 SELECT * F ...

  8. 《Zend studio 12 + UPUPW+PHP5.4开发平台配置过程》

      一.安装Zend studio 12 安装过程比较简单,就不简述.   二.修改PHP.ini文件     在UPUPW文件夹目录下,找到\upupw\PHP5\php.ini配置文件,并通过搜索 ...

  9. 用js判断页面是否加载完毕

    用document.onreadystatechange的方法来监听状态改变, 然后用document.readyState == "complete"判断是否加载完成 docum ...

  10. Delphi中window消息截获的实现方式(2)

    Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎 ...