1. 程式人生 > >[LeetCode]中級演算法-最長迴文子串

[LeetCode]中級演算法-最長迴文子串

 最長迴文子串

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

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba"也是一個有效答案。

示例 2:

輸入: "cbbd"
輸出: "bb"

目前能想到的就是暴力解法,雙層for迴圈,依次以每一個字元作為子串的起始處,判斷每一個可能的子串是否為迴文子串

class Solution {
     public String longestPalindrome(String s) {

        if(s.length()<=1){
            return s;
        }

        int len=s.length();
        int maxLength=0;
        int startIndex=0;
        int endIndex=0;
        
        
        for (int i = 0; i < len; i++) {
            for (int j = i+1; j <len ; j++) {
                
                //當首尾字元相同時,進入迴文子串判斷程式
                if(s.charAt(i)==s.charAt(j)){
                    int temp=j-i+1;
                    if(temp>maxLength) {
                        boolean flag = true;
                        for (int k = 0; k <= (j-i) / 2; k++) {
                            if (s.charAt(k + i) != s.charAt(j - k)) {
                                flag = false;
                            }
                        }
                        
                        if(flag){
                            startIndex=i;
                            endIndex=j;
                            maxLength=temp;
                        }
                    }
                }
            }
        }
        s=s.substring(startIndex,endIndex+1);
        return s;
    }
}