Skip to content

中心扩散, 分成奇偶回文序列两种情况分别遍历

java
class Solution {
    /**
     * 中心扩散, 分成奇偶回文序列两种情况分别遍历
     */
    public String longestPalindrome(String s) {
        char[] arr = s.toCharArray();
        int len = arr.length;
        // 左闭右开
        int ansLeft = 0, ansRight = 0;
        for (int i = 0; i < len; i++) {
            int l = i, r = i;
            while (l >= 0 && r < len && arr[l] == arr[r]) {
                l--;
                r++;
            }
            if (r - l - 1 > ansRight - ansLeft) {
                ansLeft = l + 1;
                ansRight = r;
            }
        }

        for (int i = 0; i < len - 1; i++) {
            int l = i, r = i+1;
            while (l >= 0 && r < len && arr[l] == arr[r]) {
                l--;
                r++;
            }
            if (r - l - 1 > ansRight - ansLeft) {
                ansLeft = l + 1;
                ansRight = r;
            }
        }

        return s.substring(ansLeft, ansRight);
    }
}

Personal Knowledge Base