5--最长回文子串(动态规划)
题目
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
解释
- 首先定义一个二维数组a[][],这个数组是用来表示i到j是不是回文串的标识,是boolean类型的,由于1到1和2到2这种的都是回文串,所以在创建的时候就初始化为
a[i][i]=true
。 - 设置一个长度L,从2开始,这个长度就是每次比量的时候的长度,就是把一个字符串拆出一个个小串,对这些小串进行比量。比如当L=2的时候,i=0,j=1;i=1j=2;i=2,j=3;因为只有这样才能让前指针和后指针不相等的时候进行处理,直接等于它俩包围的那个就行。
- 只有当a[i][j]等于true的时候和j-i大于最大值的时候,因为要找最大的,才更新left和max。
代码
点击查看代码
class Solution {
public String longestPalindrome(String s) {
if(s.length()<2){
return s;
}
int length=s.length();
int maxlength=0;
int left=0;
boolean arr[][]=new boolean[length][length];
for(int i=0;i<length;i++){
arr[i][i]=true;
}
char[] c = s.toCharArray();
for(int L=2;L<=length;L++){
for(int i=0;i<length;i++){
int j=L+i-1;
if(j>=length){
break;
}
if(c[i]!=c[j]){
arr[i][j]=false;
}
else {
if(j-i<3){
arr[i][j]=true;
}
else {
arr[i][j]=arr[i+1][j-1];
}
}
if(arr[i][j]&&(j-i)>maxlength){
maxlength=j-i;
left=i;
}
}
}
return s.substring(left,left+maxlength+1);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-04-24 Leetcode/数学/计数质数