天天看點

字元串算法——最長回文子串

問題:給定一個字元串,找出最長的回文子串

例如:

“babad”的最長回文子串為”bab”,當然”aba”也是可以的

解決思路:這種問題要考慮到回文子串是奇數還是偶數情況,分為兩種可能。這裡可以采用從内向外擴散的方法來解決該問題。

例如:回文子串為奇數,從第一個字元元素開始擴散。第一個子串為”b”,然後第二個字元元素為“a”,向左右擴散一位為”bab”,還是回文子串,再向左右擴散不滿足回文條件,則第二個回文子串為“bab”,重複上述操作。回文子串為偶數情況與上述類似。

class Solution {
    public static String longestPalindrome(String s) {
        int len = s.length();//字元串長度
        int maxlen= ;//最長子串長度
        int start = ;
        //回文為奇數
        for(int i = ;i<len;i++){
            int first = i-;//左指針
            int last = i+;//右指針
            //向外擴散
            while(first>= && last<len&&s.charAt(first)==s.charAt(last)){
                if(maxlen<last-first+){
                    maxlen = last - first+;
                    start = first;
                }
                first--;
                last++;
            }

        }
        //回文為偶數
        for(int i = ;i<len;i++){
            int first = i;
            int last = i+;
            while(first>=&& last<len&&s.charAt(first)==s.charAt(last)){
                if(maxlen<last-first+){
                    maxlen = last - first+;
                    start = first;
                }
                first--;
                last++;
            }


        }
        //輸出子串
        if(len>){
            return s.substring(start,maxlen+start);
        }
        return null;
    }

}
           

繼續閱讀