[LeetCode5. 最长回文子串] | 刷题打卡

206 阅读1分钟

题目描述

给你一个字符串 s,找到 s 中最长的回文子串。

解题思路

这道题目是入门级的动态规划算法,用,j来表示子串的开始位置的下表,用i来表示子串结束位置的下标。 一个子串是回文子串,dp[i][j]是回文子串。写出动态规划方程dp[i][j]=dp[i+1][j-1]&&s.charAt[i]==s.charAt[j]。

AC 代码

class Solution {
    public String longestPalindrome(String s) {
       
       int len=s.length();
        boolean[][] dp=new boolean[len][len];
        int max=1;
        int start=0;
        for(int i=0;i<len;i++){
            for(int j=0;j<=i;j++){
                if(i-j==0){
                    dp[i][j]=true;
                }else if(i-j==1){
                    dp[i][j]=s.charAt(i)==s.charAt(j);
                }else{
                    dp[i][j]=dp[i-1][j+1]&&s.charAt(i)==s.charAt(j);
                }
                if(dp[i][j]&&i-j+1>max){
                    max=i-j+1;
                    start=j;
                }
            }
        }
        return s.substring(start,start+max);
    
    }
}


总结

做这种动态规划的题目,细节才是魔鬼,首先我max没有取1,i和j的位置不能搞错了,最后j的取值是0<j<=i