0
点赞
收藏
分享

微信扫一扫

最长回文子串

zhoulujun 2022-02-03 阅读 46

给你一个字符串 s,找到 s 中最长的回文子串。
动态规划
遍历时从列开始,举个例子,如果 a[0]与a[4]相同,就需要看1到3是否是回文串,列为1,所以以列先遍历,又因为子串中i一定小于j,所以遍历时i<j,因为j-1-(i+1)+1<2,j-i<3时即子串小于2时一定是回文的

class Solution {
    public String longestPalindrome(String s) {
        if(s.length() < 2)
            return s;
        int begin = 0;
        int maxlen = 1;
        int len = s.length();
        char []a = s.toCharArray();
        boolean dp[][] = new boolean [len][len];
        for(int i=0;i<len;i++)
            dp[i][i] = true;
        for(int j=1;j<len;j++){
            for(int i=0;i<j;i++){
                if(a[i]!=a[j])
                    dp[i][j]=false;
                else{
                    if(j - i < 3){
                        dp[i][j] = true;
                    }
                    else
                        dp[i][j] = dp[i+1][j-1];
                    }
                if(dp[i][j]&&(j-i+1>maxlen)){
                    begin=i;
                    maxlen=j-i+1;
                }
            }
        }
            return s.substring(begin,begin+maxlen);
        }
}
举报

相关推荐

0 条评论