![image]()
class Solution {
public String longestPalindrome(String s) {
/**
* 中心思想:就是一个回文串可以从中心开始往外扩散,如果最左边和最右边的字符相等就又可以扩张
* 同时因为要从中心,就分成奇数回文串和偶数回文串
*/
int ansl=0;
int ansr=0;
//奇数回文串
for (int i = 0; i < s.length(); i++) {
int l=i-1;
int r=i+1;
if(l<0||r>s.length()){
if(ansr-ansl<r+1-l+1){
ansr=r-1;
ansl=l+1;
}
continue;
}
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
l--;
r++;
}
if(ansr-ansl<r-2-l){
ansr=r-1;
ansl=l+1;
}
}
//偶数回文串
for (int i = 0; i < s.length(); i++) {
if(i+1<s.length()&&s.charAt(i)!=s.charAt(i+1)){
continue;
}
int l=i;
int r=i+1;
if(l<0||r>s.length()){
if(ansr-ansl<r-l){
ansr=r;
ansl=l;
}
continue;
}
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
l--;
r++;
}
if(ansr-ansl<r-1-l-1){
ansr=r-1;
ansl=l+1;
}
}
return s.substring(ansl,ansr+1);
}
}