5. Longest Palindromic Substring

這道題的關鍵點在於,對於字符串的賦值操做要謹慎,儘可能採用記錄下標的方式,而不是整個字符串的賦值,這樣能夠節省時間。spa

public class Solution {
    public String longestPalindrome(String s) {
        String res="";
        int size=s.length();
        int maxLen=0;
        int maxLeft=0;
        int maxRight=0;
        
        
        
        //奇數長度的迴文串
        for(int i=0;i<size;i++)
        {
            String temp="";
            int len=1;
            temp+=s.charAt(i);
            int left=i-1;
            int right=i+1;
            while(left>=0&&right<size)
            {
                if(s.charAt(left)==s.charAt(right))
                {
                    //這種寫法太耗時間
                    //temp=s.charAt(left)+temp;
                    //temp=temp+s.charAt(right);
                    len+=2;
                    left--;
                    right++;
                    
                }
                else
                    break;
            }
            if(len>maxLen)
            {
                maxLen=len;
                maxLeft=left;
                maxRight=right;
            }
        }
        
        //偶數長度的迴文串
        for(int i=0;i<size;i++)
        {
            String temp="";
            int len=0;
            int left=i;
            int right=i+1;
            while(left>=0&&right<size)
            {
                if(s.charAt(left)==s.charAt(right))
                {
                    //每次都進行一個新的字符串的建立,太消耗時間,這裏只須要記錄
                    //子串的下標便可
//                    temp=s.charAt(left)+temp;
//                    temp=temp+s.charAt(right);
                    len+=2;
                    left--;
                    right++;
                }
                else
                    break;
            }
            if(len>maxLen)
            {
                //記錄下最長子串的首尾便可
                maxLen=len;
                maxLeft=left;
                maxRight=right;
            }
        }
        res=s.substring(maxLeft+1, maxRight);
        return res;
        
    }
}
相關文章
相關標籤/搜索