题目: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)的解法,看完只能说碉堡了,有空搬译下。


ssnau
1.5k 声望98 粉丝

负能量职业打码师


引用和评论

0 条评论