思路:
- 假设当前字符为回文的中点,回文数有两种形式(abba和abcba)
- 当当前字符与前一个字符相同时相同时,满足第一种形式,但是如果与下一个字符也相同时,也满足第二种显示。所以第一种情况需要判断。
- 其余情况都当成子串有中心字符的情况处理。
class Solution {
public String longestPalindrome(String s) {
char[] chars = s.toCharArray();
int max = -1;
String res= null;
for (int i = 0; i < chars.length; i++) {
//判断若当前位置是回文中心点的话回文数是多少
if(i-1>=0 && chars[i] == chars[i-1]){
//abba
int k =1;
while (i-k-1 >=0 && i+k< chars.length && chars[i-k-1] == chars[i+k]){
k++;
}
k--;
if(k*2+2>max){
max = k*2+2;
res = s.substring(i-k-1, i+k+1);
}
if(i+1< chars.length && chars[i-1] == chars[i+1]){
k = 1;
while (i-k>=0 && i+k<chars.length && chars[i-k] == chars[i+k]){
k++;
}
k--;
if(k*2+1>max){
max = k*2+1;
res = s.substring(i-k, i+k+1);
}
}
}else{
//否则全部当作abcba处理
int k = 1;
while (i-k>=0 && i+k<chars.length && chars[i-k] == chars[i+k]){
k++;
}
k--;
if(k*2+1>max){
max = k*2+1;
res = s.substring(i-k, i+k+1);
}
}
}
return res;
}
}