代码随想录——分割回文串 II

news2025/1/15 13:19:50

题目

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。

返回符合要求的 最少分割次数 。

示例 1:

输入:s = “aab” 输出:1 解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。

示例 2: 输入:s = “a” 输出:0

示例 3: 输入:s = “ab” 输出:1

提示:

1 <= s.length <= 2000 s 仅由小写英文字母组成

思路

类似分割回文串,本题也可以用回溯,但是会超时,本题考虑动态规划

对于回文子串,两到基础题目一定要弄清楚:

  1. 回文子串
  2. 最长回文字串

动规五部曲:

  1. 确定dp数组和下标含义
    dp[i]:范围是[0, i]的回文子串,最少分割次数是dp[i]

  2. 确定递推公式
    如果要对长度为[0, i]的子串进行分割,分割点为j,分割后,根据dp[i]的定义,dp[j]就表示[0, j]区间的最小切割数量,此时如果区间[j + 1, i]是回文子串,那么dp[i] 就等于 dp[j] + 1,最后要找的是最少切割次数,所以递推公式为:
    dp[i] = min(dp[i], dp[j] + 1)

  3. 初始化dp数组
    根据定义,dp[i]表示范围是[0, i]的回文子串,最少分割次数是dp[i],那么dp[0]一定是0,因为长度为1的字符串最小分割次数就是0
    对于非零下标的dp[i]初始化,在递推公式dp[i] = min(dp[i], dp[j] + 1) 中可以看出每次要取最小的dp[i],所以应该初始化为一个最大数,因为如果取0的话,会无法被覆盖,最终结果都是0

  4. 确定遍历顺序
    根据递推公式:dp[i] = min(dp[i], dp[j] + 1)

j是在[0,i]之间,所以遍历i的for循环一定在外层,遍历j的for循环在内层

  1. 举例推导dp数组
    以输入:“aabc” 为例:
    在这里插入图片描述
    java代码如下:
class Solution {
	public int minCut(String s){
		if(s == null || s.length() == 0){
			return 0;
		}
		int len = s.length();
		
		//1、先判断是否是回文子串
		//isPalindromic记录子串[i..j]是否是回文串
		boolean[][] isPalindromic = new int[len][len];
		//从下到上:j —> j-1,从左到右:i —> i+1
		for(int i = len -1; i >= 0; i--){
			for(int j = i;j < len; j++){
				if(s.charAt(i) == s.charAt(j)){//两端相等的话
					if(j - i <= 2){
						isPalindromic[i][j] = true;
					} else {//长度相差大于2则收缩
						isPalindromic[i][j] = isPalindromic[i + 1][j - 1];
					}
				} else {//两端不相等的话
					isPalindromic[i][j] = false;
				}
			}
		}
		//2、判断最小分割次数
		//dp[i] 表示[0..i]的最小分割次数
		int[] dp = new dp[len];
		for(int i = 0; i < len; i++){
			//初始考虑最坏的情况。 1个字符分割0次, len个字符分割 len - 1次,这样就可以保证,便利的过程中一定可以被覆盖更新
			dp[i] = i;
		}
		
		for(int i = 1; i < len; i++){
			if(isPalindromic[0][i]){
				// 表示s[0..i]是回文了,那 dp[i] = 0, 一次也不用分割
				dp[i] = 0;
				continue;
			}
			for(int j = 0; j < i; j++){//j为分割点,比如[0,i]被j分为[0,j]和[j+1,i],那么[1,j]最少分割次数为dp[j],只需要判断[j+1,i]是否是回文子串即可,如果是的话,则dp[i] = dp[j] + 1
				if(isPalindromic[j + 1][i]){//如果[j+1,i]是回文子串
					dp[i] = Math.min(dp[i],dp[j] + 1);//取最小值
				}			
			}
		}
		return dp[len - 1];
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle技术分享 创建外键报错ORA-00906

问题描述&#xff1a;给表创建外键报错ORA-00906&#xff0c;具体过程如下&#xff1a; 数据库&#xff1a;oracle 11.2.0.464位 scottORCL2022-10-18 19:10:40> selectindex_name,table_name,tablespace_name,status,last_analyzed from user_indexes; INDEX_NAME TABLE…

事务【mysql】

1、事务的概念 事务指逻辑上的一组操作&#xff0c;组成这组操作的各个单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 在不同的环境中&#xff0c;都可以有事务。对应在数据库中&#xff0c;就是数据库事务。 把多个操作打包成一个整体&#xff0c;要么全部都执行完…

【#HDC2022】HarmonyOS体验官活动正式开启,赶快投稿赢限量奖品吧!

1. 【活动简介】 HDC 2022 于11月4日线上线下正式开启。历时一年&#xff0c;在无数开发者的共同努力下&#xff0c;我们汇聚了HarmonyOS生态的新成果、新体验、新开放能力&#xff0c;邀你参与到HarmonyOS的每一步成长和构建中。 本次HarmonyOS体验官活动&#xff0c;将以文章…

MySQL自连接和内连接和外连接_左外连接+右外连接

自连接&#xff1a;将一张表看作两张表 练习&#xff1a;查询员工id&#xff0c;员工姓名及其管理者的id和姓名select emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name from employees emp,employees mgr where emp.manager_id mgr.employee_id;内连接 只是把左…

多肽Caerulein (desulfated)、pGlu-QDYTGWMDF-NH2、20994-83-6

Caerulein, desulfated 是脱硫后的Caerulein。Caerulein 是一种十肽&#xff0c;与胃泌素和胆囊收缩素 (CCK) 具有相同的五个羧基末端氨基酸。 Caerulein, desulfated is the desulfurated form of Caerulein. Caerulein is a decapeptide having the same five carboxyl-termi…

DevOps Master课程总结:知否知否,应是DevOps肥ITIL瘦

1.ITIL定义及挑战 ITIL即IT基础架构库(Information Technology Infrastructure Library, ITIL&#xff0c;信息技术基础架构库)由英国政府部门CCTA(Central Computing and Telecommunications Agency)在20世纪80年代末制订&#xff0c;现由英国商务部OGC(Office of Government…

Vue3 - computed 计算属性(详细教程)

简介 相信大家在 Vue2 中已经领略到了其功能&#xff0c;不再过多赘述了。 计算属性处理一些复杂的运算非常合适&#xff0c;对于任何包含响应式数据的复杂逻辑的表达式&#xff0c;都建议使用计算属性来完成&#xff0c;而不是臃肿的在模板中直接书写。 回忆 Vue2 先来看个 …

UE4插件-读取png图片

一、简介 在UE4中有多种类型的插件&#xff0c;适用于不同的场景。既可以放到引擎中还可以放到项目中&#xff0c;放到引擎中的插件可以被所有项目使用&#xff0c;放到项目中的插件只能被当前项目使用。插件的类型可以在【Edit】->【Plugins】->【New Plugin】中查看 …

06 在MSYS2中编译树莓派裸机程序,并在QEMU中运行

作者将狼才鲸创建日期2022-11-14 Gitee源码和工程地址&#xff1a;才鲸嵌入式 / 开源安防摄像机&#xff08;嵌入式软件&#xff09; CSDN文章地址&#xff1a;项目介绍&#xff1a;开源安防摄像机&#xff08;嵌入式软件&#xff09; 4&#xff09;完整的环境安装步骤 写在前…

软件产品测试的准入准出标准有哪些?

软件产品的测试并不是测试人员简单的执行测试过程便可以交付的&#xff0c;而是有着一定的标准&#xff0c;什么条件可以开始测试&#xff0c;什么时候结束测试等等也就是测试的准入准出标准。 一、软件测试的准入标准 1、开发人员编码结束并且已在开发环境中完成单元测试&a…

OpUtils局域网唤醒:远程引导计算机

局域网唤醒 &#xff08;LAN&#xff09;&#xff0c;通常称为 LAN 唤醒&#xff0c;是一种计算机网络标准&#xff0c;有助于远程启动有线和无线网络。也称为远程唤醒、LAN 唤醒、无线 LAN 唤醒或简称 WOL&#xff0c;LAN 唤醒技术可帮助网络管理员优化能源使用&#xff0c;并…

一文教你搞定Python如何自定义标准排序

文章目录1.字典自定义排序按照value排序按照key值排序先按照value降序&#xff0c;再按key升序2.多维列表自定义标准排序案例题目描述输入输出代码&#xff1a;1.字典自定义排序 按照value排序 sdict() s[a]45 s[b]44 s[c]78 s[d]34 asorted(s.items(),keylambda x:x[1],reve…

手摸手教你使用 Docker 快速搭建 Gitlab 服务

前言 Glitlab 比较占用内存&#xff0c;官方建议最低配置为 2核4G。我的服务器刚刚好是2核4G&#xff0c;但是还装了 Docker 跑一些其他服务&#xff0c;所以以防万一&#xff0c;还是选择在本地的虚拟机中进行安装。 如果你有一台配置较高的服务器那就更好了&#xff0c;一步…

nodejs+vue+elementui图书馆销售网上书城管理系统express228

目 录 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 1 1.1开发背景 1 1.2开发意义 1 1.3研究内容 1 第2章 主要技术和工具介绍 3 下面我们讲解 1、 node_modules文…

【数据结构】队列详解 栈和队列OJ题 —— 用队列实现栈、用栈实现队列、设计循环队列

文章目录前言队列的概念队列的结构队列的实现结构设计接口总览初始化销毁入队列出队列取对头数据取队尾数据判空计算队列大小OJ题用队列实现栈用栈实现队列设计循环队列结语前言 今天的内容分为两大块&#xff1a;队列讲解 和 OJ题。队列讲解部分内容为&#xff1a;队列概念&a…

Android App开发图像加工中卡片视图CardView和给图像添加装饰的讲解以及实战(附源码 简单易懂)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、卡片视图 随着手机越来越先进&#xff0c;开发者已经不满足简单地显示一张张图片&#xff0c;而要设计更多的花样&#xff0c;比如Android提供了一个卡片视图CardView&#xff0c;顾名思义它拥有卡片式的圆角边框&#xff…

[附源码]java毕业设计健身房管理系统论文2022

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

深度剖析 Vue3 如何通过虚拟DOM更新页面

上一讲我们主要介绍了 Vue 项目的首次渲染流程&#xff0c;在 mountComponent 中注册了effect 函数&#xff0c;这样&#xff0c;在组件数据有更新的时候&#xff0c;就会通知到组件的 update 方法进行更新 Vue 中组件更新的方式也是使用了响应式 虚拟 DOM 的方式&#xff0c…

git 命令行其实真的很好用

使用命令行操作git&#xff0c;我觉得是最简单、最直接的方式&#xff0c;最开始使用git的时候特别喜欢这种方式。后来&#xff0c;就不再使用命令行&#xff0c;而是选择了其他可视化的工具&#xff0c;如idea自带的插件、sourceTree、TortoiseGit、GitKraken。发生的转变的原…

AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 深度学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/42 &#x1f4d8; 自然语言处理实战系列&#xff1a;https://www.showmeai.tech/tutorials/45 &#x1f4d8; 计算机视觉实战系列&#xff1a;h…