【leetcode】 Palindrome Partitioniong (middle) (*^__^*)
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;
}
};
随机推荐
- android 读取SQLite android could not open the database in read/write mode错误
由于AndroidManifest.xml文件中uses-permission没有设置权限问题 <uses-permission android:name="android.permi ...
- 关于SVN代码提交粒度和频率的思考
今天组内新来的一个同事问我代码提交频率的问题,他在上家公司是一个模块功能开发自测完成后再提交.而我这边采用的是最少一天提交一次,提倡粒度较小的提交, 而且是基于主干开发.采用这种方式是出于以下几点考虑 ...
- 一段可以使用的 hibernate获得对象->action存入List->jsp页面用<s:iterator>迭代的代码
SelectAction.java @SuppressWarnings("serial") @Component("selectAction") @Scope( ...
- 牡丹江.2014k(构造)
K - Known Notation Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Su ...
- springMVC之国际化
1.工程结构 2.jar包 3.配置文件spring-config.xml,springMVC配置文件 <?xml version="1.0" encoding=" ...
- 分享一个c#t的网页抓取类
using System; using System.Collections.Generic; using System.Web; using System.Text; using System.Ne ...
- iOS开发——源代码管理——svn 命令行下常用的几个命令
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domai ...
- jbuilder的set!方法重构接口
https://github.com/rails/jbuilder 的set!方法重构接口, 因为grape没法使用 jBuilder 的缓存,所以直接用 Rails 写 API (1)多个图片 i ...
- python 集合 -----直接用逗号连接的是元组,不是list
t = 12345, 54321, 'hello!' >>> t[0] 12345 >>> t (12345, 54321, 'hello!') 元组:元组由逗号分 ...
- 清除SVN版本控制文件
命名为bat后缀文件,放在对应目录下. @echo on color 2f mode con: cols=80 lines=25 @REM @echo 正在清理SVN文件,请稍候...... @rem ...