leetcode131. 分割回文串(java)

分割回文串

  • leetcode131. 分割回文串
    • 题目描述
    • 回溯算法 + 动态规划
    • 代码演示
  • 回文字符串

leetcode131. 分割回文串

题目描述

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = “aab”
输出:[[“a”,“a”,“b”],[“aa”,“b”]]
示例 2:

输入:s = “a”
输出:[[“a”]]

提示:

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

回溯算法 + 动态规划

题目要求是所有分割可能,所以用回溯算法是最好的,
但在用回溯算法前,我们应该先准备好回溯算法要回溯的数据.要回溯什么呢,就是所有是回文的子字符串.
求子字符串就可以用动态规划:
一个直观的做法是,我们先预处理除所有的 f[i][j],f[i][j] 代表 [i, j] 这一段是否为回文串。

预处理 f[i][j] 的过程可以用递推去做。
要想 f[i][j] == true ,必须满足以下两个条件:
f[i + 1][j - 1] == true
s[i] == s[j]
由于状态 f[i][j] 依赖于状态 f[i + 1][j - 1],因此需要我们左端点 i 是从大到小进行遍历;而右端点 j 是从小到大进行遍历。

因此,我们的遍历过程可以整理为:右端点 j 一直往右移动(从小到大),在 j 固定情况下,左端点 i 在 j 在左边开始,一直往左移动(从大到小)

然后开始回溯:
刚开始我们从起点第一个 a 进行搜索:

发现 a 是回文串,先将 a 分割出来,再对剩下的 bababa 进行搜索
发现 aba 是回文串,先将 aba 分割出来,再对剩下的 baba 进行搜索
发现 ababa 是回文串,先将 ababa 分割出来,再对剩下的 ba 进行搜索
发现 abababa 是回文串,先将 abababa 分割出来,再对剩下的 `` 进行搜索

代码演示

class Solution {/*** 分割字符串* @param s* @return*/public List<List<String>> partition(String s) {if (s == null || s.length() < 1){return null;}int n = s.length();boolean[][] f = new boolean[n][n];char[] cs = s.toCharArray();for (int j = 0;j < n;j++){for (int i = j;i >= 0;i--){if (i == j){f[i][j] = true;}else if (j - i == 1){//长度为2 时f[i][j] = cs[i] == cs[j];}else{//长度大于2 时f[i][j] = cs[i] == cs[j] && f[i + 1][j - 1];}}}ArrayList<List<String>> ans = new ArrayList<>();ArrayList<String> cur = new ArrayList<>();dfs(s,0,ans,cur,f);return ans;}public void dfs(String s,int index,List<List<String>> ans,List<String> cur,boolean[][]f){if (index == s.length()){ans.add(new ArrayList<>(cur));}for (int i = index;i < s.length();i++){if (f[index][i]){cur.add(s.substring(index,i + 1));dfs(s,i + 1,ans,cur,f);cur.remove(cur.size() - 1);}}}
}

回文字符串

leetcode5. 最长回文子串

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

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

相关文章

[踩坑记] Linux环境下bitsandbytes安装是后报错解决

情境 在测试LLM Webui demo的时候&#xff0c;安装依赖pip install bitsandbytes0.40.0 后&#xff0c;python -m module name 时报错:CUDA Setup failed despite GPU being available. Please run the following command to get more information。 解决方法 从git hub 官方…

5.python设计模式【单例模式】

内容&#xff1a;保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点角色&#xff1a; 单例&#xff08;Singleton&#xff09; UML图 举个例子&#xff1a; 需求&#xff1a;一个类只能实例化一个对象&#xff0c;不能实例化多个对象 from abc import abstract…

RocketMQ教程-(5)-功能特性-事务消息

事务消息为 Apache RocketMQ 中的高级特性消息&#xff0c;本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。 事务消息为 Apache RocketMQ 中的高级特性消息&#xff0c;本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。…

Kotlin与Java语法对比学习

定义变量 // Kotlin val i: Int 10 // 定义一个整数变量 val d: Double 10.0 // 定义一个双精度浮点数变量 val b: Boolean true // 定义一个布尔变量 val c: Char a // 定义一个字符变量 val s: String "Hello, World!" // 定义一个字符串变量 val arr: …

PostgreSQL查看数据库对象大小

PostgreSQL查看数据库对象大小 PostgreSQL查看数据库对象大小1、查看某个数据库大小2、查看多个数据库大小3、按顺序查看索引大小4、查看所有对象的大小 PostgreSQL查看数据库对象大小 1、查看某个数据库大小 select pg_size_pretty(pg_database_size(tzqdb));2、查看多个数据…

【已解决】VS报错C2760

在项目中增加第三方库的时候&#xff0c;出现了C2760的报错&#xff0c;常用路径都设置好了&#xff0c;判断可能是属性设置的问题&#xff0c;就查了一下&#xff0c;确实一下就改好了 操作流程&#xff1a; 项目右键后打开最下面的属性 属性——》C/C——》语言——》符合…

数据库触发器简介——修改数据的触发器、删除数据的触发器

1.修改数据的触发器 修改数据的触发器 create trigger tb_user_update_triggerafter update on tb_user for each row begininsert int user_logs(id,operation,operate_time,operate_id,operate_params)VALUES(null,update,now(),new.id,concat(更新之前的数据&#xff1a;i…

如何设置Axure中文版 Mac系统下axurerp10怎么设置成中文

有许多小伙伴肯定想知道axure rp 10怎么转换为中文版&#xff0c;接下来就为大家带来最详细的汉化教程&#xff0c;大家可以根据教程一步一步操作&#xff0c;保证可以汉化成功&#xff01; 准备工作 安装好axurerp10 axurerp10汉化包 百度网盘链接: 百度网盘 请输入提取码 …

2023牛客暑期多校训练营2(D/E/F/H/I/K)

目录 D.The Game of Eating E.Square F.Link with Chess Game H.0 and 1 in BIT I.Link with Gomoku K.Box D.The Game of Eating 思路&#xff1a;倒着贪心。因为正着贪会导致一种局面&#xff1a;我选了当前喜爱值最大的菜&#xff0c;但是就算我不选这个菜&#xff0…

PostgreSQL实战-数据库迁移部署

PostgreSQL实战-数据库迁移部署 介绍 根据项目需求&#xff0c;我们需要将现有的PostgreSQL数据库重新部署到新的服务器上。由于项目本身就是基于PostgreSQL数据库构建的&#xff0c;因此数据库迁移将变得十分便捷。接下来&#xff0c;我将简要介绍我们的迁移步骤。 迁移步骤…

halcon线扫描相机平面交点检测--

目录 代码示例代码示例的逐句解释 以下是halcon中的代码示例 * This example shows the inspection of planar intersections of * 3D objects. The intersections are derived by intersecting the * reconstructed 3D object models with suitable planes, using the * o…

2.1 色彩空间

色彩发送器 色彩认知&#xff1a;光源是出生点&#xff0c;光源发射出光线&#xff0c;光线通过直射反射折射等路径最终进入人眼。但是人眼接收到光线后&#xff0c;人眼的细胞产生了一系列化学反应。由此把产生的新号传入大脑&#xff0c;最终大脑对颜色产生了认知感知。 光的…

如何把爱好变成事业?

如何把爱好变成事业&#xff1f; 目录 引言爱好与事业的关系如何把爱好变成事业 研究市场需求建立专业技能制定计划与目标 追求爱好的「变现」的利与弊 利&#xff1a;工作的乐趣与激情弊&#xff1a;压力与挑战 如何平衡爱好与事业 分清爱好与事业的界限建立时间管理和优先级…

数据结构-时间空间复杂度

目录 前言 1.什么是数据结构 2.什么是算法 3.数据结构和算法的重要性 1.算法的时间复杂度和空间复杂度 1.1算法效率 1.1.1如何衡量一个算法的好坏 1.1.2算法的复杂度 1.2时间复杂度 1.2.1时间复杂度的概念 1.2.2大O的渐进表示法 2.编程练习 2.1.1 排序遍历 2.1.2 2.1.3 单身狗解…

第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

string基本概念 string是C风格的字符串&#xff0c;而string本质上是一个类 string和char区别 1、char是一个指针 2、string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char型的容器。 特点&#xff1a; string类内部封装了很多成员方…

[JAVAee]wait方法与sleep方法的区别

①最明显的一个区别是,wait方法需要搭配synchronized关键字进行使用.而sleep方法的使用不需要 ②wait是一个Object类的方法,sleep是Thread类的一个静态方法 方法说明 public static void sleep(long millis) throws interruptedException 使当前正在执行的线程以指定的毫秒数…

PostMan+Jmeter工具介绍及安装

目录 一、PostMan介绍​编辑 二、下载安装 三、Postman与Jmeter的区别 一、开发语言区别&#xff1a; 二、使用范围区别&#xff1a; 三、使用区别&#xff1a; 四、Jmeter安装 附一个详细的Jmeter按照新手使用教程&#xff0c;感谢作者&#xff0c;亲测有效。 五、Jme…

windows无盘启动技术开发之使用本地镜像文件启动电脑

by fanxiushu 2023-07-26 转载或引用请注明原始作者。 其实使用本地镜像文件启动电脑&#xff0c;这个windows操作系统本身就是自带的功能。 win7以上的系统&#xff0c;制作 vhd或vhdx格式的镜像文件&#xff0c; 然后在镜像文件中安装windows操作系统&#xff0c;然后放到真实…

【数据结构】树状数组和线段树

树状数组和线段树 下文为自己的题解总结&#xff0c;参考其他题解写成&#xff0c;取其精华&#xff0c;做以笔记&#xff0c;如有描述不清楚或者错误麻烦指正&#xff0c;不胜感激&#xff0c;不喜勿喷&#xff01; 树状数组 需求&#xff1a; 能够快速计算区间和保证在修改…

fastadmin采坑之接口分页处理

其实不算fastadmin的代码而是thinkphp自带的分页代码 paginate函数就是自带的分页函数&#xff0c;开始我以为这个只能用于渲染模板不能用于接口&#xff0c;后面看到源代码发现请求参数带page就可以 /*** ApiTitle (获取协会会员)* ApiSummary (获取协会会员)* ApiMethod …