leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II
131. Palindrome Partitioning
一个字符串,通过不同的切分找到所有切分后的子字符串都是回文的可能性
substr使用的是坐标值,不使用.begin()、.end()这种迭代器
使用dfs,类似于subsets的题,每次判断要不要加入这个数
start每次是起始的位置,判断当前位置到起始位置是不是回文
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > result;
if(s.empty())
return result;
vector<string> res;
int start = ;
partition(s,result,res,start);
return result;
}
void partition(string s,vector<vector<string>>& result,vector<string>& res,int start){
if(start == s.size()){
result.push_back(res);
return;
}
for(int i = start;i < s.size();i++){
if(!ispalindrome(s,start,i))
continue;
res.push_back(s.substr(start,i - start + ));
partition(s,result,res,i+);
res.pop_back();
}
}
bool ispalindrome(string s,int start,int end){
while(start < end){
if(s[start++] != s[end--])
return false;
}
return true;
}
};
132. Palindrome Partitioning II
切分字符串,找到最小切分次数让所有的子字符串都是回文
这种方法是否回文和dp一起做了。dp[i]表示当前位置最小的切分次数。
每次先初始化先初始化为要切分i次,然后从前往后找,找到符合的然后更新最小值
class Solution {
public:
int minCut(string s) {
int n = s.size();
vector<int> dp(n);
vector<vector<bool> > flag(n,vector<bool>(n));
for(int i = ;i < n;i++){
dp[i] = i;
for(int j = ;j <= i;j++){
if(s[i] == s[j] && (i - j < ||flag[i-][j+])){
flag[i][j] = true;
dp[i] = j == ? :min(dp[i],dp[j-] + );
}
}
}
return dp[n-];
}
};
老方法,这种方法是把所有子串的回文串先存储起来,然后再进行dp
class Solution {
public:
int minCut(string s) {
int length = s.length();
if(length <= )
return ;
vector<vector<bool>> flag(length+,vector<bool>(length+));
for(int i = ;i <= length;i++){
flag[i][i] = true;
if(i < length){
if(s[i-] == s[i])
flag[i][i+] = true;
else
flag[i][i+] = false;
}
}
for(int j = ;j <= length-;j++){
for(int k = ;k <= length-j-;k++){
if(s[k-] == s[k+j] && flag[k+][k+j] == true)
flag[k][k+j+] = true;
else
flag[k][k+j+] = false;
}
}
vector<int> result(length+);
result[] = -;
for(int i = ;i <= length;i++){
result[i] = i-;
for(int j = i-;j >= ;j--){
if(flag[j+][i] == true){
if(result[j] + < result[i])
result[i] = result[j] + ;
}
}
}
return result[length];
}
};
leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II的更多相关文章
- LeetCode 131. 分割回文串(Palindrome Partitioning)
131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...
- leetcode 266.Palindrome Permutation 、267.Palindrome Permutation II
266.Palindrome Permutation https://www.cnblogs.com/grandyang/p/5223238.html 判断一个字符串的全排列能否形成一个回文串. 能组 ...
- leetcode 169. Majority Element 、229. Majority Element II
169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...
- leetcode 79. Word Search 、212. Word Search II
https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...
- leetcode 54. Spiral Matrix 、59. Spiral Matrix II
54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...
- leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- leetcode 280.Wiggle Sort 、324. Wiggle Sort II
Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...
- leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST
1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...
随机推荐
- 《Photoshop CS4手绘艺术技法》
书名 <Photoshop CS4手绘艺术技法> 图片 时间 2017-4月 学习 想了想当初的学习动机,自己P图片可是P的是实在是丑就会做几张动图.看完了才发现这行博大精深而且自己的审 ...
- WebForm 【上传图片】【图片验证码】
上传图片(带水印) 1.获取要上传的图片 2.加水印 3.保存下来 using System.Drawing; --绘画类命名空间 图片最后要用绝对路径保存 Server.MapP ...
- sqlserver 级联删除、级联更新
增加外键约束时,设置级联更新.级联删除:[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ][ ON UPDATE { NO A ...
- webstrom vue项目让局域网访问
vue项目package.json "dev": "webpack-dev-server --inline --progress --config build/webpa ...
- 【操作系统】二、JVM线程与Linux内核线程的映射
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...
- 【Spring】15、spring mvc路径匹配原则
Ant path 匹配原则 在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径 ...
- Nginx拦截指定国家的IP
Nginx拦截指定国家的IP 一.下载GeoIP数据库 wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz wget h ...
- CSS中的sprites
CSS的sprites(雪碧图,精灵图) *三个名字都要记住 定义:就是将界面上需要的小的导航按钮图标,小图标整合成一张背景图片 然后用background-position来实现背 ...
- 安卓开发之ScrollView
当界面不足以将所有的内容显示出来的时候便导致下面的部分内容无法显示出来 所有加上ScrollView 来讲要显示的内容放入之中便可以实现上下滚动界面内容 但是当要显示多个控件的时候会出错 原因是Sc ...
- (后台)org.apache.catalina.connector.ClientAbortException: null
比如错误日志是这样的: org.apache.catalina.connector.ClientAbortException: null 那么问题基本上就是服务器准备进行response的时候,发现连 ...