最长回文串

image

class Solution {
    public String longestPalindrome(String s) {
        /**
         * 中心思想:就是一个回文串可以从中心开始往外扩散,如果最左边和最右边的字符相等就又可以扩张
         * 同时因为要从中心,就分成奇数回文串和偶数回文串
         */
        int ansl=0;
        int ansr=0;
        //奇数回文串
        for (int i = 0; i < s.length(); i++) {
            int l=i-1;
            int r=i+1;
            if(l<0||r>s.length()){
                if(ansr-ansl<r+1-l+1){
                    ansr=r-1;
                    ansl=l+1;
                }
                continue;
            }
            while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
                l--;
                r++;
            }
            if(ansr-ansl<r-2-l){
                ansr=r-1;
                ansl=l+1;
            }
        }
        //偶数回文串
        for (int i = 0; i < s.length(); i++) {
            if(i+1<s.length()&&s.charAt(i)!=s.charAt(i+1)){
                continue;
            }
            int l=i;
            int r=i+1;
            if(l<0||r>s.length()){
                if(ansr-ansl<r-l){
                    ansr=r;
                    ansl=l;
                }
                continue;
            }

            while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
                l--;
                r++;
            }
            if(ansr-ansl<r-1-l-1){
                ansr=r-1;
                ansl=l+1;
            }
        }
        return s.substring(ansl,ansr+1);
    }
}
posted @ 2026-09-17 18:07  Jwwind  阅读(3)  评论(0)    收藏  举报