LeetCode.5. Longest Palindromic Substring

https://leetcode.com/problems/longest-palindromic-substring/

找到最長的迴文子串。

一種方法是從頭到尾遍歷一次,在每次迭代中,以當前字符爲中心,像兩側擴展判斷是否爲迴文。
然後以當前爲中心最長的那個迴文串,並記錄下最長的迴文串的start和end。

class Solution {
    public String longestPalindrome(String s) {
        
        if (s == null || s.length() == 0) {
            return "";
        }
        
        int start = 0;
        int end = 0;
        
        for (int i = 0; i < s.length(); i++) {
            int len1 = expandCenter(s, i, i);     // 'abba' 以 b 爲中心擴展
            int len2 = expandCenter(s, i, i + 1); // 'abba' 以 bb 爲中心擴展
            
            int maxLen = Math.max(len1, len2); // 找出最大的那個
            
            if (maxLen > end - start) { // 與歷史最大的比較
                start = i - (maxLen - 1) / 2;
                end = i + maxLen / 2;
            }
            
        }
        
        return s.substring(start, end + 1);
    }
    
    public int expandCenter(String s, int l, int r) {
        while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
            l--;
            r++;
        }
        
        return r - l - 1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章