LeetCode 5. Longest Palindromic Substring

December 13, 2020

題目 5. Longest Palindromic Substring,這題一開始沒想出來解法,但是是知道回文規則。看了影片和一些參考資料才知道使用 DP 的原理。

class Solution {
    public String longestPalindrome(String s) {
        if (s.length() == 1) return s;
        if (s.length() == 2 && s.charAt(0) == s.charAt(1)){
            return s;   
        }
        int start = 0;
        int end = 0;
    
        boolean [][] dp = new boolean[s.length()][s.length()];
        // 自己和自己是回文
        for (int i=0; i<dp.length; i++){
            dp[i][i] = true;
        }
        // 相鄰的字元相同也是回文
        for (int i = 0; i < s.length()-1; i++) {
            if (s.charAt(i) == s.charAt(i+1)) {
                dp[i][i+1] = true;
                start = i;
                end = i+1;
            }
        }
        for (int len = 2; len < s.length(); len++) {
            for (int i = 0; i < s.length()-len; i++) {
                int j = i + len;
                // 當比較某字元時,其該 dp 的位置的左半部會是計算好的結果
                if (s.charAt(i) == s.charAt(j) && dp[i+1][j-1]) {
                    dp[i][j] = true;
                    start = i;
                    end = len+i;
                }
            }
        } 
        
        return s.substring(start, end+1);
    }
}

Ref