LeetCode 132. 分割回文串 II(DP)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
dp[i]
表示到 i 为止的子串最少需要分割多少次- 如果一个子串为回文串,dp[i] = 0
- 如果不是,遍历所有的 j (j <= i),
如果s[j,i]是回文串,dp[i] = min(dp[i], dp[j-1]+1)
28 / 29 个通过测试用例
# 超时例子
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
class Solution {public:int minCut(string s) {int i,j,n = s.size();vector<int> dp(n,0);if(s.size()<=1)return 0;for(i = 0; i < n; ++i)dp[i] = i;for(i = 1; i < n; ++i){for(j = i; j > 0; --j){if(ispalindrome(s,0,i))dp[i] = 0;else if(ispalindrome(s, j, i))dp[i] = min(dp[i], dp[j-1]+1);}}return dp[n-1];}bool ispalindrome(string& s, int l, int r){while(l < r){if(s[l++]!=s[r--])return false;}return true;}
};
- 预先预处理得到所有可能的区间是否是是回文串
- 参考:LeetCode 5. 最长回文子串(动态规划)
class Solution {public:int minCut(string s) {int i,j,len,n = s.size();vector<int> dp(n,0);vector<vector<bool>> ispalind(n,vector<bool>(n,false));if(s.size()<=1)return 0;for(i = 0; i < n; ++i){dp[i] = i;ispalind[i][i] = true;if(i < n-1 && s[i]==s[i+1])ispalind[i][i+1] = true;}for(len = 1; len < n; ++len){for(i = 0; i < n-len; ++i){if(ispalind[i][i+len-1] && i-1>=0 && s[i-1]==s[i+len])//是回文串ispalind[i-1][i+len] = true;}}for(i = 1; i < n; ++i){for(j = i; j > 0; --j){if(ispalind[0][i])dp[i] = 0;else if(ispalind[j][i])dp[i] = min(dp[i], dp[j-1]+1);}}return dp[n-1];}
};
124 ms 7.4 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 132. 分割回文串 II(DP)相关推荐
- 132. 分割回文串 II
链接:132. 分割回文串 II 题解:https://leetcode-cn.com/problems/palindrome-partitioning-ii/solution/xiang-tong- ...
- leetcode 131. 分割回文串(dp+回溯)
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aab&quo ...
- LeetCode 1278. 分割回文串 III
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...
- LeetCode 131. 分割回文串【字符串,回溯算法】
131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = &q ...
- LeetCode 1278. 分割回文串 III(区间DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个由小写字母组成的字符串 s,和一个整数 k. 请你按下面的要求分割字符串: 首先,你可以将 s 中的部分字符修改为其他的小写英文字母. 接着,你需 ...
- 【LeetCode - 131】分割回文串(dp,dfs)
题目链接:https://leetcode-cn.com/problems/palindrome-partitioning/ 题目: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. ...
- leetcode132. 分割回文串 II
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s 分割成 [ ...
- LeetCode 131. 分割回文串(回溯)
文章目录 1. 题目 2. 回溯 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: ...
- leetcode 131. 分割回文串 思考分析
题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 思考 问题可以分为两个子问题:1.判断回文串2.分割数组 判断回文串 bool isPalin ...
最新文章
- 计算机视觉基本原理——RANSAC
- asp.net 在 Ngnix 服务器 中配置攻略
- log4j配置文件详解
- 玩“剪刀石头布“的脑机!密歇根大学开发由大脑意识精密控制的假肢
- String str =new String(“abc“)和 String str = “abc“的比较
- POJ 1651 Multiplication Puzzle 区间dp(水
- type pdf c语言课程设计,c语言课程设计-.pdf
- python编程项目中遇到的困难_python开发中遇到的常见问题,你们又是如何解决的呢?如何快速的学好python,有没有什么小技巧?...
- windows performance
- Jquery封装幻灯片效果
- php时钟制作心得,电子钟课程设计心得
- 15 使用计算机应遵守行业道德规范,初中信息技术会考试题 -
- 高通CPU处理器解析
- kafka之重新分配分区副本kafka-reassign-partitions命令
- 那些很棒的 blog and site 优秀的博客和网站推荐
- C语言的stdio.h文件
- 详解常用的Batch Norm、Group Norm,Layer norm、Instance Norm
- 五款最棒的Go语言开发工具?
- matlab基本知识(入门)
- SCSI/iSCSI及SAS、NAS、SAN的基本介绍
热门文章
- steam一键授权工具_半个东的时间让你省了一个亿 Steam免费游戏一键领取
- uboot源码——内核启动分析
- dhcp failover linux,ISC dhcp failover的mclt参数很重要啊
- php 字符串的比较大小,php怎么比较两个字符串的大小
- Maven配置项目依赖使用本地仓库的方法汇总
- hihoCoder #1143 : 骨牌覆盖问题·一
- Java学习笔记之:Java引用数据类型之字符串
- Linux中使用GDB调试NS2
- 小问题,对递归重复调用的改进,一起来分享
- 标准C语言库 Glibc 2.15