给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
样例:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
动态规划:设s[i][j]为从i到j的字符串。当c[i]和c[j]不相等时,s[i][j]一定不是回文串。当c[i]和c[j]相等时,其是否是回文串的性质和s[i+1][j-1]一样。初态为长度为1,一定是回文串。
Java代码:
- class Solution {
- public String longestPalindrome(String s) {
- int len=s.length();
- if(len < 2) {
- return s;
- }
- int maxlen=1;
- int begin=0;
- //dp[i][j]表示s[i..j]是否是回文串
- boolean[][]dp=new boolean[len][len];
- //初始化:所有长度为1的子串都是回文串
- for(int i=0;i
- dp[i][i]=true;
- }
- //将字符串转换为字符数组
- char[] chararray=s.toCharArray();
- //递推开始
- //先枚举子串长度
- for(int l=2;l<=len;l++){
- //枚举左边界
- for(int i=0;i
- //因为j-i+1=l,得到
- int j=l+i-1;
- //若右边界越界,退出循环
- if(j>=len){
- break;
- }
- if(chararray[i]!=chararray[j]){
- dp[i][j]=false;
- }else{
- if(j-i<3){
- dp[i][j]=true;
- }else{
- dp[i][j]=dp[i+1][j-1];
- }
- }
- if(dp[i][j]&&j-i+1>maxlen){
- maxlen=j-i+1;
- begin=i;
- }
-
- }
- }
- return s.substring(begin,begin+maxlen);
-
- }
- }
-
相关阅读:
Java基于SpringBoot的闲一品交易平台
基于JAVA物业后台管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
CloseableHttpClient,HttpClient4使用配置
(附源码)springboot学生社团管理系统 毕业设计 151109
pointpillars训练的输出信息
教育课堂小程序,三分钟打造专属小程序 带完整搭建教程
智能座舱SoC竞争升级,国产7nm芯片迎来重要突破
windows11编译ffmpeg
Redis快速上手篇(四)(Spring Cache,缓存配置)(注解方式)
vue3+ele-plus+sortableJs对el-table使用sortableJs插件对表格拖拽时限定某列或某行不允许拖拽
-
原文地址:https://blog.csdn.net/m0_64694079/article/details/132797358