美文网首页小北的Leetcode之路
Leetcode-5:最长回文子串

Leetcode-5:最长回文子串

作者: 小北觅 | 来源:发表于2018-12-04 20:00 被阅读68次

    描述:

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:
    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。

    示例 2:
    输入: "cbbd"
    输出: "bb"

    class Solution {
        public String longestPalindrome(String s) {
            if(s.length()==0 || s==null)
                return "";
            
            int len = s.length();
            int[][] dp = new int[len][len];
            int max = 1;
            int index =0;
            //初始化单个字符以及相邻字符
            for(int i=0;i<len;i++){
                dp[i][i]=1;
                if(i<len-1 && s.charAt(i)==s.charAt(i+1)){
                    dp[i][i+1]=1;
                    max = 2;
                    index = i;
                }
                    
            }
            
            for(int i=1;i<len;i++){
                
                for(int j=0;j<i;j++){
                    
                    if(s.charAt(j)==s.charAt(i) && (i-j<=2||dp[j+1][i-1]==1 )){
                        dp[j][i]=1;
                        if(i-j+1>max){
                            max = i-j+1;    
                            index = j;
                        }
                    }
                        
                }
    
            }    
            return s.substring(index,index+max);
        }
    }
    

    循环中的if(s.charAt(j)==s.charAt(i) && (i-j<=2||dp[j+1][i-1]==1 )是精髓。
    尤其是i-j<=2 。 可以想到如果i,j相差<=2时,只要s.charAt(j)==s.charAt(i),那么str[j-->i]就是回文。如 a 、aa、 aba

    相关文章

      网友评论

        本文标题:Leetcode-5:最长回文子串

        本文链接:https://www.haomeiwen.com/subject/wmivcqtx.html