5. 最长回文子串 - LeetCode

5. 最长回文子串

题目链接

动态规划

class Solution {
    public String longestPalindrome(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n + 1][n];
        int left = 0, right = 1;
        for(int i = 0; i < n; i++){
            dp[0][i] = true;
            dp[1][i] = true;
        }
        for(int i = 2; i <= n; i++){
            for(int j = 0; j + i - 1 < n; j++){
                if(s.charAt(j) == s.charAt(j + i - 1) && dp[i - 2][j + 1]){
                    dp[i][j] = true;
                    left = j;
                    right = j + i;
                }
            }
        }
        return s.substring(left, right);
    }
}

dp[i][j]表示以j为起点长度为i的回文串是否存在。

时间复杂度O(n2),空间复杂度也为O(n2)。

如果用中间扩散的方法,可以降低空间复杂度,但时间复杂度没变。

Manacher算法可以实现O(n)的时间复杂度,但是太过复杂没看懂,先埋个坑吧。

posted @ 2021-01-18 14:10  一天到晚睡觉的鱼  阅读(36)  评论(0)    收藏  举报