题目:Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
分析:找出最长回文子串,我下意识就是枚举每一个点,对每一个点往两边查找,直到s[i-offset] != s[i+offset]
。于是踩到了这道题的一个大坑,因为回文不一定是一个字符的两边相等,还可能是两个相等字符的两边都相等啊,如:
abccba
对于corner case 一定一定要好好把握了。。
最终程序(写的巨丑):
public class Solution {
public String longestPalindrome(String s) {
if (s.length()==0) return s;
if (s.length()==1) return s;
int max = 0, start = 0, end = 0, l = 0, offset, j;
for (int i = 0, len = s.length(); i < len - 1; i++) {
offset = 1;
j = i;
while (j <= i + 1) {
if (s.charAt(i) != s.charAt(j)) break;
while(i - offset >= 0 && j + offset < len) {
if (s.charAt(i - offset) == s.charAt(j + offset)) {
offset++;
} else {
break;
}
}
offset -= 1;
l = (j - i + 1) + 2 * offset;
if (l > max) {
start = i - offset;
end = j + offset;
max = l;
}
j++;
}
}
return s.substring(start, end + 1);
}
}
还有一个O(n)的解法,看完只能说碉堡了,有空搬译下。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。