题目:
最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
(注:回文字符串就是该字符串正着读和倒着读的顺序一模一样。)
解题思路:
这里采用的是二维数组的方式:动态规划
有一个二维数组dp[i][j],对角线是自己跟自己比较,所以肯定是true,i相当于是一位数组的开头,j相当于是一位数组的末尾,然后i与j位置的数字比较看是否一致,因为回文子串的要求不仅仅是开头和末尾的数字要一样,要求的是中间内容的也是对称一样的,比如说12321.
上综合可知是回文串:首先要保证dp[i][j] = (s[i]==s[j]) and dp[i+1][j-1
是为true,其次是边界条件j - i < 3
上代码吧
class Solution {
public String longestPalindrome(String s) {
int len=s.length();
if(len<=1){
return s;
}
int begin=0,maxlen=1;
boolean[][] dp=new boolean[len][len];
for(int i=0;i<len;i++){
dp[i][i]=true;
}
char[] chars=s.toCharArray();
for(int j=1;j<len;j++){
for(int i=0;i<j;i++){
if(chars[i]!=chars[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);
}
}