题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

中心扩展法,统计长度因为每次都是+2,初始化的时候为了方便初始化比正常的大了1,所以需要减一;
import java.util.*;

class Solution {
    public int getLongestPalindrome(String s) {
        int len = s.length();
        int maxcnt = 0;
        if (s == null || (len) < 1) return 0;
        //总共有2 * len - 1个中心点
        for (int i = 0; i < 2 * len - 1; i++) {
            //通过遍历每个回文中心,向两边扩散,并判断是否回文字串
            //有两种情况,left == right,right = left + 1,这两种回文中心是不一样的
            // 奇数相同,偶数加一
            int left = i / 2, right = left + i % 2;
            int cnt;
            if (i % 2 == 0) cnt = 0;
            else cnt = 1;
            while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) {
                // 每次往外延展其实是2个长度!
                cnt += 2;
                //如果当前是一个回文串,则记录数量
                if (maxcnt < cnt) {
                    maxcnt = cnt;
                }
                left--;
                right++;
            }
        }
        return maxcnt - 1;
    }
}



全部评论

相关推荐

点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务