LeetCode——5. 最長迴文子串

LeetCode——5. 最長迴文子串

5.最長迴文子串
給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。

示例 1:
輸入: “babad”
輸出: “bab”
注意: “aba” 也是一個有效答案。

示例 2:
輸入: “cbbd”
輸出: “bb”

分析

暴力破解,不要頻繁使用substring截取子串,直接轉爲字符數組用下標操作更快,還有判斷迴文串用兩個指針一頭一尾比較,不使用stringbuffer的reverse()反轉方法,這樣不會超時。我第一次反之就超時了!∑(っ°Д°;)っ臥槽,不見了。
更牛批的方法等我開竅┓(;´_`)┏

代碼

//先試一把暴力破解
class Solution {
    public String longestPalindrome(String s) {
        if (s.equals(""))
            return "";
        char[] chars = s.toCharArray();
        int resLength = 0;
        int begin = 0;
        int end = 0;
        for(int i = 0; i < chars.length-1 ; i++) {
            for(int j = i+1; j < chars.length ; j++) {
                if(j-i+1>resLength){ //如果大於最長迴文子串長度
                    if(judge(chars,i,j)){ //判斷是否爲迴文串
                        resLength = j-i+1; //更新最長迴文子串長度
                        begin = i; //更新下標
                        end = j;
                    }
                }
            }
        }
        return s.substring(begin,end+1);
    }

//    public static boolean judge(String s1){
//        String s2 = new StringBuffer(s1).reverse().toString();
//        if(s1.equals(s2)){
//            return true;
//        }else {
//            return false;
//        }
//    }
    private boolean judge(char[] chs, int low, int high){  //判斷迴文
        while(low <= high){
            if(chs[low] != chs[high])
                return false;
            high--;
            low++;
        }
        return true;
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章