93、动态规划-最长回文子串

思路

首先从暴力递归开始,回文首尾指针相向运动肯定想等。就是回文,代码如下:

public String longestPalindrome(String s) {if (s == null || s.length() == 0) {return "";}return longestPalindromeHelper(s, 0, s.length() - 1);}// 递归方法,用于寻找从left到right范围内的最长回文子串private String longestPalindromeHelper(String s, int left, int right) {if (left == right) {return s.substring(left, right + 1); // 如果左右指针相等,说明是单个字符,单个字符本身是回文}// 如果当前字符串是回文,直接返回这个子串if (isPalindrome(s, left, right)) {return s.substring(left, right + 1);}// 不是回文时,尝试两种情况:忽略左边字符或忽略右边字符String leftPalindrome = longestPalindromeHelper(s, left + 1, right);  // 忽略左边字符String rightPalindrome = longestPalindromeHelper(s, left, right - 1); // 忽略右边字符// 比较这两种情况,返回更长的那个回文子串return leftPalindrome.length() > rightPalindrome.length() ? leftPalindrome : rightPalindrome;}// 辅助方法,用于检查给定字符串s从left到right的部分是否是回文private boolean isPalindrome(String s, int left, int right) {while (left < right) {  // 双指针法检查是否回文if (s.charAt(left) != s.charAt(right)) {return false; // 一旦发现不对称,立即返回false}left++;  // 移动左指针right--; // 移动右指针}return true; // 所有字符均对称,是回文}

递归面临很多重复计算,这个时候可以使用动态规划

动态规划的思路:

  1. 状态定义:定义 dp[i][j] 为布尔值,表示字符串从索引 i 到索引 j 的子串是否为回文。
  2. 初始化:单个字符总是回文,所以对于所有 idp[i][i]true
  3. 状态转移方程:如果 s[i]s[j] 相等,并且内部的子串也是回文(即 dp[i+1][j-1]true 或者 ij 之间的距离小于等于2),那么 dp[i][j] 也应该是 true
  4. 从底向上填表:由于每个状态依赖于左下方的状态(即 dp[i+1][j-1]),我们需要从下向上和从左到右填充这个表。
 public String longestPalindrome(String s) {if (s == null || s.length() == 0) {return "";}int n = s.length();boolean[][] dp = new boolean[n][n];String longest = "";// 填充动态规划表for (int len = 1; len <= n; len++) { // len 是当前子串的长度for (int start = 0; start < n; start++) {int end = start + len - 1;if (end >= n) { // 确保不越界break;}// 设置dp[start][end]的值dp[start][end] = (s.charAt(start) == s.charAt(end)) && (len <= 2 || dp[start + 1][end - 1]);// 如果当前子串是回文,检查它是否是最长的回文if (dp[start][end] && len > longest.length()) {longest = s.substring(start, end + 1);}}}return longest;}

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

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

相关文章

量化教程3---miniqmt当作第三方库设置,提供源代码

qmt提供了大qmt和miniqmt&#xff0c;大qmt在平台使用&#xff0c;miniqmt提供了交易的api和数据可以本地使用&#xff0c;非常的方便&#xff0c;合适自己开发大型的策略&#xff0c;本地还可以访问其他数据&#xff0c;网络等&#xff0c;也支持服务器 以前的教程 qmt教程1…

内网安全【2】——域防火墙/入站出站规则/不出网隧道上线/组策略对象同步

-隧道技术&#xff1a;解决不出网协议上线的问题(利用出网协议进行封装出网)&#xff08;网络里面有网络防护&#xff0c;防火墙设置让你不能正常访问网络 但有些又能正常访问&#xff0c;利用不同的协议tcp udp 以及连接的方向&#xff1a;正向、反向&#xff09; -代理技术&…

uni-app 多列picker切换列显示对应内容

html部分&#xff1a; <view class"uni-list"><view class"uni-list-cell"><view class"uni-list-cell-left">选择用户</view><view class"uni-list-cell-db"><picker mode"multiSelector"…

【密评】 | 商用密码应用安全性评估从业人员考核题库(5/58)

我国金融信息系统、第二代居民身份证管理系统、国家电力信息系统、社会保障信息系统、全国中小学学籍管理系统中&#xff0c;都应用&#xff08;&#xff09;技术构建了密码保障体系。 A. 核心密码 B. 普通密码 C. 商用密码 D. 核心密码和普通密码 商用密码从业单位开展商用密…

【VUE】el-descriptions 描述列表

Descriptions 描述列表 列表形式展示多个字段。 <el-descriptions title"用户信息"><el-descriptions-item label"用户名">kooriookami</el-descriptions-item><el-descriptions-item label"手机号">18100000000</e…

信阳电力乙级资质企业的财务管理创新

信阳电力乙级资质企业在财务管理创新方面&#xff0c;需要采取一系列策略来适应电力行业的快速发展和市场环境的变化。以下是一些可能的财务管理创新方向&#xff1a; 财务信息化与数字化&#xff1a; 推进财务信息化和数字化建设&#xff0c;采用先进的财务管理软件&#xff0…

学习3:scrapy请求对象、模拟登录、POST请求、管道的使用、crawlspider爬虫类

请求对象 请求对象参数 scrapy.Request(url[],callback,method"GET",headers,body,cookies,meta,dont_filterFalse)callback 表示当前的url响应交给那个函数去处理method 指定请求方式headers 接受一个字典&#xff0c;其中不包括cookiesbody 接收json字符串&#…

uniapp读取项目本地文件/json文件/txt文件

uniapp读取项目本地文件/json文件/txt文件 文件必须放在static目录下 方法&#xff1a; /*** 访问static里面的文件* param url 文件路径 必须在static目录下*/ function localFetch(url) {return new Promise((resolve, reject) > {plus.io.resolveLocalFileSystemURL(_ww…

阿里云VOD视频点播流程(2)

二、视频点播 1、入门代码 基于OSS原生SDK上传 &#xff0c;参考文档&#xff1a;https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spma2c4g.11186623.0.0.1f02273fj4lxNJ 视频点播面向开发者提供了丰富的上传方式&#xff0c;其中上传SDK&…

从零开始的软件测试学习之旅(八)jmeter线程组参数化及函数学习

jmeter线程组参数化及函数学习 Jmeter基础基本使用流程组件与元件 线程组线程的执行方式Jmeter组件执行顺序 常见属性设置查看结果数的作用域举例 Jmeter参数化实现方式1.用户定义参数2.用户参数3.函数4.csv数据文件设置 每日复习 Jmeter基础 基本使用流程 启动项目案例 启动…

DUX 主题 版本:8.2 WordPress主题优化版

主题下载地址&#xff1a;DUX 主题优化版.zip 支持夜间模式、快讯、专题、百度收录、人机验证、多级分类筛选&#xff0c;适用于垂直站点、科技博客、个人站&#xff0c;扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图

conda 常用的命令

conda --version conda版本 conda create --name myenv python3.8 新建一个虚拟环境 conda remove -n nlp --all 删除某个虚拟环境 conda activate myenv 激活某个虚拟环境 conda deactivate 实现在现有虚拟环境列表中切换环境 conda en…

添砖Java之路其三——自增自减运算符,数据转换与原码反码补码。

目录 运算符&#xff1a; 转换&#xff1a; 隐式转换&#xff1a; 小范围数据可以直接可以给大范围数据&#xff1a; 这里做了一张图范围向下兼容表​编辑 运算时&#xff0c;数据范围小的和数据范围大的&#xff0c;需要讲运算范围小的提升为运算范围大的同类&#xff0c…

数组与字符串操作-高效率的数组方法

高效率的数组方法包括以下几种常见的操作&#xff1a; 遍历数组&#xff1a;使用for循环或者增强型for循环可以高效地遍历数组中的每个元素。 查找元素&#xff1a;使用线性搜索或者二分搜索算法可以在有序数组中高效地查找指定元素。 插入元素&#xff1a;在数组中插入元素时…

全球AI新闻速递

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

C/C++开发,opencv-features2d模块,SIFT等特征检测器应用

目录 一、OpenCV-features2d 模块简介 1.1 features2d 模块信息 1.2 features2d 模块应用流程 二、features2d 模块编码案例 2.1 实现逻辑 2.2 features2d 模块应用程序代码 2.3 程序编译及运行 一、OpenCV-features2d 模块简介 1.1 features2d 模块信息 features2d 是…

养成类游戏原理分析。

养成类游戏原理分析。 养成类游戏&#xff0c;顾名思义、应该是规划人生或者制定学习计划有关的。其现实符合度应该是评判的标准和成功的关键。此外&#xff0c;修仙类游戏和部分根据名著改编的游戏可能应该以养成类游戏为基本构件。 养成类游戏的设计&#xff1a;首先要明确任…

炒美股怎么开户?

近年来&#xff0c;随着国内投资者对境外投资需求的不断增长&#xff0c;炒美股逐渐成为许多投资者的选择。然而&#xff0c;随着监管政策的不断完善&#xff0c;传统的互联网券商开户方式已经不再适用。那么&#xff0c;对于想要入场美股市场的投资者来说&#xff0c;该如何开…

设计模式——单例模式(Singleton)

单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中的一种&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个唯一实例。这种模式在多种场景下都非常有用&#xff0c;比如配置文件的读取、数据库连接的创建、线程池的管理等。 实现…

Angular中的路由

Angular中的路由 文章目录 Angular中的路由前言一、创建路由二、创建多个组件路由三、创建子路由四、创建多个组件子路由 前言 在Angular中&#xff0c;路由是用于在不同的视图和组件之间导航的机制。Angular提供了一种强大的路由机制来管理单页应用&#xff08;SPA&#xff0…