leetcode longest Palindromic Substring 最長迴文子串 第五題

public class longestPalindromicSubstring_5 {
    /**
     * 從左向右開始,分別以每個字母爲中心點,進行奇數迴文串和偶數迴文串的判斷
     * 記錄同一字母進行奇數迴文串判斷和偶數迴文串判斷的length,找出大者。
     * 將該字母的較大length與全局maxLength進行比較。
     * 時間複雜度O(n2)空間複雜度O(1)
     * @param s
     * @return
     */
    public static String longestPalindrome(String s) {
        int length = s.length();
        if(length< 2 ) {
            return s;
        }
        int maxStart = 0;
        int maxLen = 0;
        for(int i = 0; i < s.length(); ++i){
            int j = 0;
            int jiLen = 0;
            int ouLen = 0;
            int jiStart = 0;
            int ouStart = 0;
            int len = 0;
            int start = 0;
            int m = 0;
            // 奇數的情況
            while(i - j >= 0 && i + j < s.length() && s.charAt(i - j) == s.charAt( i + j)){
                jiStart = i - j;
                jiLen = 2 * j + 1;
                ++j;
            }
            // 偶數的情況
            while ( i - m >= 0 && i + m + 1 < s.length() && s.charAt(i - m) == s.charAt( i + m + 1)  ){
                ouStart = i - m;
                ouLen = 2 * m + 2;
                ++m;
            }
            len = jiLen>ouLen?jiLen:ouLen;
            start = jiLen>ouLen?jiStart:ouStart;
            maxLen = maxLen>len?maxLen:len;
            maxStart = maxLen>len?maxStart:start;
        }
        return s.substring(maxStart, maxStart + maxLen);
    }
    public static void  main(String[] args){
        System.out.println(longestPalindrome("babad"));
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章