码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode5.最长回文子串

时间:2019-12-11 21:14:53      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:color   偶数   bre   col   pre   amp   length   class   ++   

思路:根据标签里的动态规划,很容易想到判断[x,y]处是不是回文,就要先判断[x+1,y-1]是不是回文(这里要注意偶数问题)。

用一个二维数组p[][]记录从start处开始到end处结束的字符串是否为回文,存值为0代表不是回文或没遍历过,为1代表是回文。

那么这里其实重难点在于判定赋值为1的条件构成循环的嵌套。

遇到问题:没仔细考虑for(int len=1;len<=length;len++){
            for(int start=0;start<length;start++){

    }

}

双重循环嵌套的运行先后问题,在例子"aaaa"中,必须先P[1][2]=1,才能做P[0][4]的判断。但如果外层循环是start的循环,就不会按要求的次序走。

class Solution {
    public String longestPalindrome(String s) {
        int length=s.length();
        int maxlength=0;
        String maxPal="";
        int P[][]=new int[length][length];
        for(int i=0;i<length;i++){
           for(int j=0;j<length;j++){
               P[i][j]=0;
           }
        }
        for(int i=0;i<length;i++){
            P[i][i]=1;
        }
        for(int len=1;len<=length;len++){
            for(int start=0;start<length;start++){
          /*非常重要,两个循环不可调换次序*/
int end=start+len-1; if(end>=length){ break; } if((len==1||len==2||P[start+1][end-1]==1)&&s.charAt(start)==s.charAt(end)){ P[start][end]=1; } if(len>maxlength&&P[start][end]==1){ maxlength=len; maxPal=s.substring(start, end+1); } } } return maxPal; } }

leetcode5.最长回文子串

标签:color   偶数   bre   col   pre   amp   length   class   ++   

原文地址:https://www.cnblogs.com/hdrawery/p/12024948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!