leetcode题解132-分割回文串 II
问题描述
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。
返回符合要求的 最少分割次数 。
示例 1:
输入:s = "aab"
输出:1
解释:只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
示例 2:
输入:s = "a"
输出:0
示例 3:
输入:s = "ab"
输出:1
提示:
1 <= s.length <= 2000
s 仅由小写英文字母组成
解题思路
设 f[i]表示字符串的前缀 s[0…i]的最少分割次数。要想得出 f[i] 的值,我们可以考虑枚举 s[0…i]分割出的最后一个回文串,这样我们就可以写出状态转移方程:
即我们枚举最后一个回文串的起始位置 j+1,保证 s[j+1…i]是一个回文串,那么 f[i]就可以从 f[j]转移而来,附加 1次额外的分割次数。
注意到上面的状态转移方程中,我们还少考虑了一种情况,即 s[0…i]本身就是一个回文串。此时其不需要进行任何分割,即:
f[i]=0
那么我们如何知道 s[j+1…i]或者 s[0…i]是否为回文串呢?我们可以使用与leetcode题解5-最长回文子串中相同的预处理方法,将字符串 ss 的每个子串是否为回文串预先计算出来,即:
代码实现
class Solution {public boolean f[][]; //判断以i为起点,j为终点的字符串是否是回文串public int n; //字符串s的长度public int dp[]; //dp[i]表示以i为最后一个元素的子字符串的最少分割次数public int minCut(String s) {n=s.length();//按最长回文子串的思路填充f[][]f=new boolean[n][n];if(n==0 || n==1){return 0;}char []cs=s.toCharArray();for(int i=0;i<n;i++){for(int j=0;j<=i;j++){if(i-j<=1){if(cs[i]==cs[j]){f[j][i]=true;}}else{if(cs[i]==cs[j] && f[j+1][i-1]==true){f[j][i]=true;}}}}dp=new int[n];//计算以每个元素为后缀的子字符串的最少分割次数for(int i=0;i<n;i++){dp[i]=i; //最坏情况下,默认每个字符都要分割//如果从第一个元素一直到最后一个元素都是回文子串,那么最少分割次数是0if(f[0][i]==true){ dp[i]=0;continue;}//否则的话,从前往后遍历,如果从j+1到i可以组成一个回文子串//那么最少分割次数就等于0到j的最少分割次数+1for(int j=0;j<i;j++){if(f[j+1][i]==true){dp[i]=Math.min(dp[j]+1,dp[i]);}}}//最终返回dp[n-1]return dp[n-1];}}
leetcode题解132-分割回文串 II相关推荐
- 132. 分割回文串 II
链接:132. 分割回文串 II 题解:https://leetcode-cn.com/problems/palindrome-partitioning-ii/solution/xiang-tong- ...
- LeetCode 132. 分割回文串 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: ...
- leetcode题解131-分割回文串
问题描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aa ...
- 【LeetCode - 131】分割回文串(dp,dfs)
题目链接:https://leetcode-cn.com/problems/palindrome-partitioning/ 题目: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. ...
- leetcode132. 分割回文串 II
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s 分割成 [ ...
- 【数据结构与算法】之深入解析“分割回文串II”的求解思路与算法示例
一.题目要求 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文,返回符合要求的最少分割次数. 示例 1: 输入:s = "aab" 输出:1 解释:只需一次分割就 ...
- leetcode132. 分割回文串 II(dp)
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文. 返回符合要求的 最少分割次数 . 示例 1: 输入:s = "aab" 输出:1 解释:只需一次分割就可将 s ...
- AK F.*ing leetcode 流浪计划之回文串
欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 一.简介 二.解题步骤 三.作用 四.经典算法介绍 判断一个串是否为回文串(单次查询) 普通情况 判断指定字符 多次子 ...
- LeetCode 1278. 分割回文串 III
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...
最新文章
- SpringCloud系列一:SpringCloud的简介和架构
- gdb调试报错:Missing separate debuginfos, use: debuginfo-install glibc-XXX
- Java基础 this关键字
- ArrayList基操
- ibm liberty_使用Open Liberty的开发模式最大程度地缩短周转时间
- 21 RadioGroup ListFragment
- PetShop之ASP.NET缓存 --one
- java 线程释放_如何手动释放一个java线程占用的资源
- Hadoop-RPC底层实现与解析
- 排查DHCP服务器故障
- SD-WAN的几种典型部署和实践
- 2019软件测试最新视频教程大合集汇总
- oracle 去空格函数未生效,发现ASCII值为49824的字符
- 天敏G10数位板安装完PS无压感,观看此教程
- 【深度学习】眼底图像之视盘和黄斑分割的探索
- 大学里青年教师待遇真的很低吗?
- 计算机专业考计量经济学,计量经济学期末考试题库(完整版)及答案()(47页)-原创力文档...
- K均值算法(继续优化中)
- 如何选择CDN?你需要关注这三个方面
- 【算法】求解最大连续子序列和的问题
热门文章
- 突然!锤子科技天猫官方旗舰店商品全线下架 店铺撤店?!
- 5G手机还没普及 LG电子就已着手研发6G
- 晨哥真有料丨到底合适重要,还是感觉重要!
- oracle logical standby,Oracle10gR2 Logical Standby(一)概念与原理
- 基于TCP协议用多线程实现并发服务器,实现思路、算法和demo
- oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型
- mgr未同步 mysql_MySQL MGR如何修复数据不一致的节点
- 【java】Java运行时动态生成类几种方式
- 【Flink】Metrics运作机制
- 【Flink】Flink 报错 flink 1.12.5 启动作业报 partition not found