一直都没弄明白O(n)解法的意思,我的解法是以i为中间值,向两边扩张,判断是否相等,需要注意的是奇数和偶数的问题,所以内部为2次for循环,分别对应奇数,偶数。解决代码如下:
public class Solution {
public String longestPalindrome(String s) {
int i, j, max = 0, c = 0, n = s.length();
String result = "";
if (s.length() == 0 || n < 1)
return result;
for (i = 0; i < n; ++i) {
// 奇数
for (j = 0; (i - j >= 0) && (i + j < n); ++j) {
if (s.charAt(i - j) != s.charAt(i + j))
break;
c = j * 2 + 1;
}
if (c > max) {
max = c;
result = s.substring(i - j + 1, i + j);
}
// 偶数
for (j = 0; (i - j >= 0) && (i + j + 1 < n); ++j) {
if (s.charAt(i - j) != s.charAt(i + j + 1))
break;
c = j * 2 + 2;
}
if (c > max) {
max = c;
result = s.substring(i - j + 1, i + j + 1);
}
}
return result;
}
}