LeetCode最长回文子串

Posted code-fun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode最长回文子串相关的知识,希望对你有一定的参考价值。

题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 
方法一:将字符串倒置 ,找出公共字符串子串->确定最后碰到了自己
StringBuilder strR=new StringBuilder(s).reverse();//倒置
            int len=s.length();
            int[][] arr=new int[len][len];
            int maxlen=0;
            int startIndex=0;
            
            for(int i=0;i<len;i++) 
                for(int j=0;j<len;j++) 
                    if(s.charAt(i)==strR.charAt(j)) 
                        if(i==0||j==0) arr[i][j]=1;//边界
                            else arr[i][j]=arr[i-1][j-1]+1;
                    
//len-j-1+arr[i][j]-1==j    j(末尾的下标)-(len-j-1)(表示正着的开头下标)+1==arr[i][j](长度)
                    if((len-j-1+arr[i][j]-1==i)&&arr[i][j]>maxlen) 
                        maxlen=arr[i][j];
                        startIndex=len-j-1;
                    
                
            
            return s.substring(startIndex,startIndex+maxlen);

 

方法二动态规划:将填表的过程记录下来而不是从头来

二维boolean[][]数组记录是某两位是不是回文串

选取[l,r],s[l]==s[r]之间的字符串如果他是回文串,则[l+1,r-1]也是回文串

//str[l,r] s[l]==s[r] 判断dp[l+1,r-1]是否为真
        if(s.isEmpty()) 
            return "";
        
        int len=s.length();
        int strLen=1;
        int startIndex=0;
        
        boolean[][] dp=new boolean[len][len];
        
        for(int r=0;r<len;r++) 
            for(int l=0;l<r;l++) 
                char left=s.charAt(l);
                char right =s.charAt(r);
                if(left==right&&((r-l<=2)||dp[l+1][r-1])) 
                    dp[l][r]=true;
                    if((r-l+1)>strLen) 
                        strLen=r-l+1;
                        startIndex=l;
                    
                
            
        
        return s.substring(startIndex,startIndex+strLen);

 

 

以上是关于LeetCode最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 最长回文子串

Leetcode 5. 最长回文子串

Leetcode最长回文子串

[LeetCode] 最长回文子串

LeetCode 5 最长回文子串

LeetCode:最长回文子串