0
点赞
收藏
分享

微信扫一扫

【LeetCode全题库算法速练】5、最长回文子串

(文章目录)

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈   🍂个人博客首页: KJ.JK   💖系列专栏:LeetCode全题库算法速练

一、题目

🔸题目描述

给你一个字符串 s,找到 s 中最长的回文子串。   如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

🔸样例1

输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。

🔸样例2

输入:s = "cbbd" 输出:"bb"

二、代码参考


public class Solution {

    public String longestPalindrome(String s) {
        int len = s.length();
        if (len < 2) {
            return s;
        }

        int maxLen = 1;
        int begin = 0;
        // s.charAt(i) 每次都会检查数组下标越界,因此先转换成字符数组
        char[] charArray = s.toCharArray();

        // 枚举所有长度大于 1 的子串 charArray[i..j]
        for (int i = 0; i < len - 1; i++) {
            for (int j = i + 1; j < len; j++) {
                if (j - i + 1 > maxLen && validPalindromic(charArray, i, j)) {
                    maxLen = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substring(begin, begin + maxLen);
    }

    /**
     * 验证子串 s[left..right] 是否为回文串
     */
    private boolean validPalindromic(char[] charArray, int left, int right) {
        while (left < right) {
            if (charArray[left] != charArray[right]) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}



作者:KJ.JK

举报

相关推荐

0 条评论