leetcode:Longest Palindromic Substring java

来源:互联网 发布:相机防抖算法 编辑:程序博客网 时间:2024/06/05 21:45

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.


开始我直接用了下面的蛮力解法,时间复杂度为O(n^3);结果可想而知,直接超时

public class Solution {    public String longestPalindrome(String s)     {        int n=s.length();        int maxlength=0;        String ss="";        if(n==1)        {            return s;        }        for(int i=0;i<n-maxlength;i++)        {            for(int j=i;j<n;j++)            {                int l=j-i+1;                if(l<=maxlength)                    continue;                if(s.charAt(i)!=s.charAt(j))                    continue;                String str=s.substring(i,j+1);                int flag=0;                for(int k=0;k<l/2;k++)                {                    if(str.charAt(k)!=str.charAt(l-k-1))                    {                        flag=1;                        break;                    }                }                if(flag==0)                {                    maxlength=l;                    ss=str;                }            }        }        return ss;    }}

然后,我想到了动态规划,使程序的时间复杂度降为O(N^2),成功AC

public class Solution{    public String longestPalindrome(String s)     {          if(s == null || s.length()==0)             return "";          if(s.length()==1)             return s;          boolean[][] flag = new boolean[s.length()][s.length()];          String res = "";          int maxLen = 0;          for(int j=1;j<s.length();j++)          {            for(int i=0;i<j;i++)            {              if(s.charAt(i)==s.charAt(j) && (j-i<=2 || flag[i+1][j-1]))  //j-i<=2的判断是为了出现flag[2][3]=flag[3][2]这样的情况              {                                                           //比如 aa  aba                flag[i][j] = true;                if(maxLen<j-i+1)                {                  maxLen=j-i+1;                  res = s.substring(i,j+1);                }              }            }          }        return res;    }}


0 0