题目描述:给你一个字符串 s
,找到 s
中最长的回文子串。
原题链接:力扣
回文串:就是可以正反都一样的字符串
根据回文串 的定义可以知道如果一个字符串是回文串,那么去掉它的开头和结尾它还是回文串。由此我们可以采用动态规划的思路求解
设s是总串
这里的其他情况包含二种,一种是s[i,j]本身不是回文子串,另一种是i>j这是不合法的
如此可以得到动态规划的方程:
class Solution {
public String longestPalindrome(String s) {
int n=s.length();
boolean [][] dp=new boolean [n][n];
if(n<2){
return s;
}
int max=1;
int begin=0;
for(int i=0;i<n;i++){
dp[i][i]=true;
}
char[] charArray = s.toCharArray();
for(int l=2;l<=n;l++){
for(int i=0;i<n;i++){
int j=i+l-1;
if(j>=n){
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>max){
max=j-i+1;
begin=i;
}
}
}
return s.substring(begin,begin+max);
}
}