动态规划问题,s[left][right]=s[left+1][right-1]
left指的是字符串起始位置,right指的是字符串终止位置
如果一个字符串是回文子串,那么它的子串一定是回文子串,所以就推导出上述状态转移方程
注意临界条件:字符串长度为1时候肯定是回文子串
class Solution {
public String longestPalindrome(String s) {
int len=s.length();
if(len<2){
return s;
}
int maxLength=1;
int begin=0;
boolean[][] judge=new boolean[len][len];
for(int i=0;i<len;i++){
judge[i][i]=true;
}
for(int i=2;i<=len;i++){// 回文串的长度,从2到len开始遍历
for(int left=0;left<len;left++){ // 起始位置
int right=left+i-1;//回文串的终止位置
if(right>=len){
break;
}
if(s.charAt(left)==s.charAt(right)){
if(right-left<3){
judge[left][right]=true;
}else{
judge[left][right]=judge[left+1][right-1];
}
}else{
judge[left][right]=false;
}
if(judge[left][right]==true&&(right-left+1)>maxLength){
maxLength=right-left+1;
begin=left;
}
}
}
return s.substring(begin,begin+maxLength);
}
}