public String longestPalindrome(String s) {
if (s == null) {
return "";
}
int len = s.length();
// 长度为0或长度为1直接返回
if (len == 0 || len == 1) {
return s;
}
//int start, end;
int retStart = 0, retEnd = 0;
char[] input = s.toCharArray();
for (int i = 0; i < len; i++) {
int tmpStart = 0; int tmpEnd = 0;
// 偶数
for (int start = i, end = i + 1; start >= 0 && end < len; start--, end++) {
if (input[start] == input[end]) {
tmpStart = start;
tmpEnd = end;
} else {
break;
}
}
if ((tmpEnd - tmpStart) > (retEnd - retStart)) {
retStart = tmpStart;
retEnd = tmpEnd;
}
//如果已经可以匹配到完整字符串,就直接退出
if (retStart == 0 && retEnd == (len - 1)) {
break;
}
// 奇数
tmpStart = 0;
tmpEnd = 0;
// 偶数
for (int start = i-1, end = i + 1; start >= 0 && end < len; start--, end++) {
if (start < 0) {
continue;
}
if (input[start] == input[end]) {
tmpStart = start;
tmpEnd = end;
} else {
break;
}
}
if ((tmpEnd - tmpStart) > (retEnd - retStart)) {
retStart = tmpStart;
retEnd = tmpEnd;
}
//如果已经可以匹配到完整字符串,就直接退出
if (retStart == 0 && retEnd == (len - 1)) {
break;
}
}
if (retEnd == retStart) {
return s.substring(0,1);
}
return s.substring(retStart, retEnd+1);
}