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 ...
随机推荐
- [Laravel] Laravel的基本数据库操作部分
[laravel] laravel的数据库配置 找到程序目录结构下.env文件 配置基本的数据库连接信息 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog ...
- Java框架之Spring(三)
本文主要介绍Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合类型的装配 3 注解方式装配 4 以自动扫描把组件纳入spring容器中管理 5 代理 ...
- 教你分分钟搞定Python之Flask框架
用最短的时间开发一个数据操作接口,Python是王道! 一.安装pip .首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# ...
- 搭建Hbase完全分布式集群
配置HBASE: 因为Hbase要依赖zookeeper集群和Hadoop集群,所以在配置hbase之前先确保已经配置zookeeper集群和Hadoop集群,这里不再详解zookeeper和hado ...
- 利用echarts自定义环形图
一.代码 app.title = '通讯盒各版本用户占比'; option = { backgroundColor: '#0f0f31', title: { show:true, x:"le ...
- 初学HTML-6
表单:专门用来收集用户信息 表单元素:在HTML中,标签/标记/元素都是指HTML中的标签. eg:<a>a标签/a标记/a元素 浏览器中所以得表单标签都有特殊的外观和默认的功能. 格式: ...
- csharp: DefaultValueAttribute Class
public class CalendarEvent { public int id { get; set; } public string title { get; set; } public st ...
- 微信小程序顶部(navigationBar)设置为透明
我记得在微信小程序中导航栏的颜色可以在app.json. window里面添加navigationBarBackgroundColor属性,但是颜色只能为纯色.不能使用rgb,或者rgba的色号. ...
- Linux 下tomcat 出现 java.lang.OutOfMemoryError: unable to create new native thread
问题现象: Tomcat(8.5.13)部署了SuperMap iServer,并发用户在100左右.系统运行一段时间后,服务崩溃.异常提示 问题分析: 1.看到日志中的提示信息后,认为是系统内存不足 ...
- python 提取linux的硬件信息
1.代码实现目的 注:代码可以直接粘贴使用 为了实现对主机的整体有明确的了解,实现了下面的代码功能 代码主要功能是: 提取到主机的内存.硬盘.CPU.型号等信息 插入到mysql的数据库中 2.代码具 ...