1. 程式人生 > 實用技巧 >Windows Server 2012 R2 輔助域控制器搭建

Windows Server 2012 R2 輔助域控制器搭建

最長迴文子串

題目:
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。
示例 2:

輸入: "cbbd"
輸出: "bb"

解題思路:遍歷字串,將每一個字元都當作迴文的中點來計算當該點為中點時的迴文子串長度並記錄此時的迴文的起點和終點

class Solution {
    public String longestPalindrome(String s) {
        if(s == null || s.isEmpty())
            return s;
        
        char ch[] = s.toCharArray();
        int l = 0, r = 0;
        for(int i = 0; i < ch.length; i++) {
            int len1 = getLen(ch, i, i);
            int len2 = getLen(ch, i, i + 1);
            int len = Math.max(len1, len2);
            if(len > r - l + 1) {
                //當迴文長度是奇數時
                if(len % 2 != 0) {
                    l = i - len / 2;
                    r = i + len / 2;
                } else {
                    //當迴文長度是偶數時
                    //長度len為偶數時的i和長度為len-1時的i是相等的
                    l = i - (len - 1) / 2;  
                    r = i + len / 2;
                }
            }
        }
        
        return s.substring(l, r + 1);
    }
    
    private int getLen(char[] ch, int l, int r) {
        while(l >= 0 && r < ch.length && ch[l] == ch[r]) {
            l--;
            r++;
        }
        
        return r - l - 1;
    }
}