给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) {
return "";
}
//中心扩展法
int start=0,end=0;
for(int i=0;i<s.length();i++){
//这个是len1从第i个开始左右扩展,发现的回文串
int len1 = isRight(s,i,i);
//i和i+1之间扩展
int len2 = isRight(s,i,i+1);
int len = Math.max(len1,len2);
if(len>end-start){
start=i-(len-1)/2;
end=i+len/2;
}
}
return s.substring(start,end+1);
}
private int isRight(String s,int start,int end){
while(start>=0 && end<s.length() && s.charAt(start)==s.charAt(end)){
start--;
end++;
}
//-1是因为跳出循环的时候,两个指针走到回文字符串的不想等的地方,所以只需要减1.
return end-start-1;
}
}