20 动态规划解最长回文子序列

问题描述:给定一个字符串s,找到其中最长的回文子序列,并返回该序列的长度,可以假设s的最大长度为1000;

暴力解法:直接两个循环,遍历所有子串,并统计子串的最大长度;

public int maxLengthPalindrome(String s)
{
int max=1;
for(int i=0;i<s.length();i++)
{
for(int j=0;j<i;j++)
{
if(isPalindrome(s,i,j))
{
max=Math.max(j-i+1,max);
}
}
}
return max;
}
private Boolean isPalindrome(String s,int indexStart,indexEnd)
{
if((indexEnd-indexStart)==1)
{
if(s.charAt(indexEnd)==s.charAt(indexStart))
{
return true;
}else
{
return false;
}
}
int start=indexStart;
int end=indexEnd;
Boolean flag=true;
while(indexEnd>indexStart)
{
if(s.charAt(indexEnd)!=s.charAt(indexStart))
{
flag=false;
break;
}
end--;
start++;
}
​​​​​​​return max;
}

动态规划求解:暴力求解法时间复杂度为O(n3),使用动态规划可以降低到O(n2),使用dp[i][j]表征是否为回文子串,如果s.charAt(i)==s.charAt(j),dp[i][j]=dp[i-1][j-1];(此处要考虑j-i==1的情景),否则为0

public maxLengthPalindrome(String s)
{
Boolean dp[][]=new Boolean[s.length()][s.length()];
if(s.charAt(0)==s.charAt(1))
{
dp[0][1]==true;
}else
{
dp[0][1]=false;
}
int max=Interger.MIN_VALUE;
for(int i=1;i<s.length();i++)
{
for(int j=i+1;j<length;j++)
{
if(s.charAt(i)==s.charAt(j))
{
if(j-i==1)
{
dp[i][j]=true;
max=Math.max(max,2);
}else
{
dp[i][j]=dp[i-1][j-1];
max=Math.max(max,j-i+1);
}
}
else
{
dp[i][j]=false;
}
}
}
​​​​​​​return max;
}

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

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

相关文章

ftp的服务安装配置

安装 yum install -y vsftpd # 是否安装成功 rpm -qa | grep vsftpd # 是否开机启动 systemctl list-unit-files | grep vsftpd # 开机启动 systemctl enable vsftpd.service # ftp端口 netstat -antup | grep ftp # 状态 service vsftpd status service vsftpd start service…

java项目日常运维需要的文档资料

一、前言 java项目开发完成&#xff0c;部署上线&#xff0c;进入项目运维阶段&#xff0c;日常工作需要准备哪些资料和文档?当项目上线后&#xff0c;运行一段时间&#xff0c;或多或少会遇到一些运维上的问题&#xff0c;比如服务器磁盘饱满&#xff0c;服务器CPU&#xff0…

如何理解微服务体系结构中的 CQRS

本文翻译自 How To Understand CQRS In Microservices Architecture&#xff0c;原作者 OLEKSII。 问题描述 在典型的软件应用程序中&#xff0c;有一个负责写入和读取操作的数据存储。通常&#xff0c;应用程序实现一些 CRUD 操作&#xff0c;并且非常简单。你存储了一些东西并…

一文读懂中间件

前言&#xff1a;在程序猿的日常工作中&#xff0c; 经常会提到中间件&#xff0c;然而大家对中间件的理解并不一致&#xff0c;导致了一些不必要的分歧和误解。“中间件”一词被用来描述各种各样的软件产品&#xff0c;在不同文献中有着许多不同的中间件定义&#xff0c;包括操…

JS:绘制日历,结合vue3食用

思路解析&#xff1a;假设展示2023年12月的日历 ①通过new Date(new Date(2023,12).setDate(0)).getDate()获取2023.12月的天数lastDay ②通过new Date(2023,11,1).getDay()获取2023.12月第一天的起始位置startDay ③根据自己的需求在startDay和lastDay的前后补0&#xff0c…

Hadoop学习笔记(HDP)-Part.13 安装Ranger

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

粒子群优化算法的实践

粒子群优化算法的实践 flyfish 粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;或者粒子群算法 红叉的地方是理想之地&#xff0c;这些粒子都想去&#xff0c;总结8个字是信息共享&#xff0c;个人决策。 上完图之后&#xff0c;上代码&a…

Vue JAVA开发常用模板

1.VsCode添加模板 左下角设置》用户代码片段 新建全局代码片段》将模板粘贴仅文件&#xff08;prefix用于指定触发关键字&#xff09; 添加成功过后输入配置的关键字即可使用 1.1 vue2模板 {// Example:"Print to console": {"prefix": "vue2",…

vue实现数字千分位格式化 如6,383,993,037,937.463

1.封装文件&#xff1a;numberToCurrency.js /**实现数字千分位格式化 如6,383,993,037,937.463 */ export function numberToCurrencyNo(value) {if (!value) return 0// 获取整数部分const intPart Math.trunc(value)// 整数部分处理&#xff0c;增加,const intPartFormat …

使用 Go Modules 管理依赖:简明教程

一、GoLang 中包的介绍和定义 包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案Go 语言为我们提供了很多内置包&#xff0c;如 fmt、strconv、strings、sort、errors、times、encoding/json、os、io 等Golang 中的包可以分为三种&…

C++ 实现的Ping类的封装

Ping 使用 Internet 控制消息协议&#xff08;ICMP&#xff09;来测试主机之间的连接。当用户发送一个 ping 请求时&#xff0c;则对应的发送一个 ICMP Echo 请求消息到目标主机&#xff0c;并等待目标主机回复一个 ICMP Echo 回应消息。如果目标主机接收到请求并且网络连接正常…

SpringCloud+Nacos项目集成Seata分布式事务

上一篇&#xff1a; 《 Seata-分布式事务介绍 》&#xff1a; 简单介绍了分布式事务的实现方式&#xff0c;以及详细讲述了Seata-AT模式的两阶段提交步骤流程。 完整示例项目代码地址&#xff1a; https://gitee.com/cnyunze/yz-seata.git Seata快速上手 安装教程Seata Server…

动手学深度学习笔记

1. 深度学习基础与MLP 1.1 框架&#xff1a; 线性回归&#xff1b; Softmax回归&#xff08;实际上用于分类问题&#xff09;&#xff1b; 感知机与多层感知机&#xff1b; 模型选择&#xff1b; 权重衰退&#xff08;weight decay&#xff09;&#xff1b; 丢弃法&…

sql面试题之累计消耗问题

sql中累计求和是我们比较经常遇到的问题&#xff0c;那么与之相反的累计消耗的问题不知你是否挑战过 –问题&#xff1a;在活动大促中&#xff0c;有玩游戏瓜分奖金环节。现有奖金池为3000元&#xff0c;代表奖金池中的初始额度 表中的数据代表每一个用户和其对应的得分&#…

Java 并发编程面试题——Java 线程间通信方式

目录 1.✨Java 线程间有哪些通信方式&#xff1f;1.1.volatile 和 synchronized 关键字1.2.等待/通知机制1.2.1.概述1.2.2.经典范式 1.3.管道输入/输出流1.4.信号量 2.Thread.join() 有什么作用&#xff1f;它的使用场景是什么&#xff1f;3.Java 中需要主线程等待子线程执行完…

Linux Valgrind-Memcheck内存检测工具

1 什么是Valgrind-Memcheck内存检测 Valgrind-Memcheck用来检测 c/c++程序中出现的内存问题,所有对内存的读写都会被检测到 对一切的malloc()/free()/new/delete 调用都会被捕获。 2 主要检测以下问题: 对未初始化内存的使用;读/写释放后的内存块;读/写超出 malloc 等分配…

java:封装统一的响应体code、data、msg、paging

背景 我们在写接口的时候一般不会直接返回给前端数据&#xff0c;而是会有响应体&#xff0c;比如 code、data、msg&#xff0c;这样就有一个统一的结构方便前端处理&#xff0c;那么今天就来封装一个统一的响应体 封装基本响应体 1、在 config 包里新建 ApiResponse.java …

5+铜死亡+预后模型+分型生信思路,热点搭配免疫相关思路

今天给同学们分享一篇生信文章“The pathogenesis of DLD-mediated cuproptosis induced spinal cord injury and its regulation on immune microenvironment”&#xff0c;这篇文章发表在Front Cell Neurosci期刊上&#xff0c;影响因子为5.3。 结果解读&#xff1a; 基因芯…

LeetCode - 110. 平衡二叉树(C语言,二叉树,配图,简单)

根据题意&#xff0c;我们只需要比较当前节点的左右子树高度差是否小于1&#xff0c;利用分治法&#xff0c;只需要满足&#xff1a; 1. 根节点的左右子树的高度差小于1。 2. 根节点左右子树的满足高度差小于1&#xff0c;在往下走&#xff0c;判断左子树根节点的左右子树是否满…

微信小程序进行分包加载

微信小程序的分包加载是一种优化技术&#xff0c;可以将小程序拆分成多个分包&#xff0c;然后按需加载&#xff0c;以提高小程序的加载速度和用户体验。下面是微信小程序进行分包加载的步骤&#xff1a; 在小程序的项目目录中&#xff0c;创建一个新的文件夹&#xff0c;用于…