Medium 5题 Longest Palindromic Substring

来源:互联网 发布:淘宝账户名怎么修改 编辑:程序博客网 时间:2024/06/16 02:11

Question:

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"Output: "bab"Note: "aba" is also a valid answer.

Example:

Input: "cbbd"Output: "bb"

Solution:

都只过了38%???why。。。

public class Solution {    public static String longestPalindrome(String s) {        if(s==null)            return "";        if(s.length()==1)            return s;        int min_start=0;        int max_end=1;        int max_len=1;        int i=0;        for(i=0;i<=s.length()-1;i++)        {            if(s.length()-i<=max_len/2) break;            int k=i, j=i;            //skip duplicate keys            while(k<s.length()-1&&s.charAt(k)==s.charAt(k+1))                k++;            while(k<s.length()-1&&j>0&&s.charAt(k+1)==s.charAt(j-1))            {                k++;                j--;            }            int len=k+1-j;            if(max_len<len)            {                min_start=j;                max_end=k+1;                max_len=len;            }        }        return s.substring(min_start,max_end);            }}

public class Solution {    public String longestPalindrome(String s) {        if(s.length()==0||s==null)            return "";        if(s.length()==1)            return s;        String longest=s.substring(0,1);        int len=s.length();        for(int i=0;i<=len-1;i++)        {            if(s.length()-i<=longest.length()/2)                break;            String tmp=helper(s,i,i);            if(tmp.length()>longest.length())            {                longest=tmp;            }            tmp=helper(s,i,i+1);            if(tmp.length()>longest.length())            {                longest=tmp;            }        }        return longest;    }    public String helper(String s, int begin,int end)    {        while(begin>=0 && end<=s.length()-1 && s.charAt(begin) == s.charAt(end))        {            begin--;            end++;        }        return s.substring(begin+1,end);    }}


这是最优解

public class Solution {    public String longestPalindrome(String s) {        if(s==null||s.length()==0)            return "";        int max=1;        int low=0;        int high=1;        for(int i=0;i<=s.length()-1;i++)        {            if(isPalindrome(s,i-max-1,i))            {                low=i-max-1;                high=i+1;                max+=2;            }            else if(isPalindrome(s,i-max,i))            {                low=i-max;                high=i+1;                max+=1;            }        }        return s.substring(low,high);    }    private boolean isPalindrome(String s, int start, int end) {        if(start<0)            return false;        while(start<end){            if(s.charAt(start)!=s.charAt(end))                return false;            start++;            end--;;        }        return true;    }}



0 0
原创粉丝点击