首页 > 代码库 > leetcode5。Longest Palindromic Substring

leetcode5。Longest Palindromic Substring

技术分享

 

 写了一个爆搜,超时了,所以更改了一个方法,使用flag数组记录标志,

动态规划,类似于lcs的解法,数组flag[i][j]记录s从i到j是不是回文

首先初始化,i>=j时,flag[i][j]=true,这是因为s[i][i]是单字符的回文,当i>j时,为true,是因为有可能出现flag[2][1]这种情况,比如bcaa,当计算s从2到3的时候,s[2]==s[3],这时就要计算s[2+1] ?= s[3-1],总的来说,当i>j时置为true,就是为了考虑j=i+1这种情况。

接着比较s[i] = s[j],如果成立,那么flag[i][j] = flag[i+1][j-1],否则直接flag[i][j]=false

 

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

不知怎么的,leetcode上提交第一次的时候,又是显示超时,但是又提交了一次后,显示通过了。(meng)。

leetcode5。Longest Palindromic Substring