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的更多相关文章

  1. LeetCode 131. 分割回文串(Palindrome Partitioning)

    131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...

  2. leetcode 266.Palindrome Permutation 、267.Palindrome Permutation II

    266.Palindrome Permutation https://www.cnblogs.com/grandyang/p/5223238.html 判断一个字符串的全排列能否形成一个回文串. 能组 ...

  3. leetcode 169. Majority Element 、229. Majority Element II

    169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...

  4. leetcode 79. Word Search 、212. Word Search II

    https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...

  5. leetcode 54. Spiral Matrix 、59. Spiral Matrix II

    54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...

  6. 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 ...

  7. leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String

    344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...

  8. leetcode 280.Wiggle Sort 、324. Wiggle Sort II

    Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...

  9. 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 ...

随机推荐

  1. DotNetCore学习-3.管道中间件

    中间件是用于组成应用程序管道来处理请求和响应的组件.管道内的每个组件都可以选择是否将请求交给下一个组件,并在管道中调用下一个组件之前和之后执行一些操作. 请求委托被用来建立请求管道,并处理每一个HTT ...

  2. LeetCode-数组操作-Python<三>

    上一篇:LeetCode链表相加-Python<二> 以前没怎么做过算法题,来来去去都是那些循环,所以先从数组简单题开始做. 这两天最大心得: 总在边界里考虑不周到,导致错误 做晕的时候, ...

  3. Windows下vue-cli脚手架搭建入门<一>

    简单了解Node.js.npm,安装Node.js,下载网址:http://nodejs.cn/download/ 查看node,npm安装成功与否.打开cmd命令行,输入命令 node-v  .np ...

  4. Receiver 和 Direct方式的区别

    Kafka direct 跟receiver 方式接收数据的区别? Receiver是使用Kafka的高层次Consumer API来实现的.Receiver从Kafka中获取的数据都是存储在Spar ...

  5. 搭建Hbase完全分布式集群

    配置HBASE: 因为Hbase要依赖zookeeper集群和Hadoop集群,所以在配置hbase之前先确保已经配置zookeeper集群和Hadoop集群,这里不再详解zookeeper和hado ...

  6. Docker 轻量级图形管理软件 Portainer

    安装 docker swarm :https://www.cnblogs.com/klvchen/p/9437758.html portainer 集群启动 docker volume create ...

  7. .NET代码设计简单规范

    以下转载于:http://www.it28.cn/ASPNET/825095.html 下面这个规范是我为朋友写的几点建议,写的很范,作为BLOG,愿与大家一起分享.只给出部分设计规范样例,关于.NE ...

  8. Android 将数据写入Execl格式导出U盘、发送邮件

    创建Execl.写入Execl数据.导入U盘 public WriteExcel(Context mContext){ this.mContext = mContext; } // 创建excel表 ...

  9. jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本

    -----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join).  上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...

  10. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...