用java 实现 Longest Palindromic Substring 最长回文子串(leetCode 算法)

最长回文子串(Longest Palindromic Substring)是LeetCode上一个经典的问题,它要求我们找到给定字符串中最长的回文子串。这个问题可以通过多种方法来解决,其中一种高效的方法是中心扩展法。该算法的基本思想是遍历每个字符,并以该字符为中心尝试向两边扩展,寻找最长的回文子串。

下面是用Java实现这个算法的方法:

public class LongestPalindromicSubstring {
    public static String longestPalindrome(String s) {
        if (s == null || s.length() < 1) return "";
        int start = 0, end = 0;
        for (int i = 0; i < s.length(); i++) {
            int len1 = expandAroundCenter(s, i, i); // 奇数长度的回文子串
            int len2 = expandAroundCenter(s, i, i + 1); // 偶数长度的回文子串
            int len = Math.max(len1, len2);
            if (len > end - start) {
                start = i - (len - 1) / 2;
                end = i + len / 2;
            }
        }
        return s.substring(start, end + 1);
    }

    private static int expandAroundCenter(String s, int left, int right) {
        while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
            left--;
            right++;
        }
        return right - left - 1;
    }

    public static void main(String[] args) {
        // 示例调用
        String input = "babad";
        System.out.println("The longest palindromic substring is: " 
                           + longestPalindrome(input));
    }
}

这段代码实现了longestPalindrome方法,该方法接收一个字符串s作为参数,并返回s中最长的回文子串。expandAroundCenter辅助方法用于从给定的中心位置向两侧扩展,直到无法形成回文为止,并返回找到的回文子串的长度。

main方法中,我们给出了一段测试代码来展示如何调用longestPalindrome方法。在这个例子中,输入字符串为"babad",预期输出应该是"bab"或"aba",因为这两个都是可能的最长回文子串。请注意,当存在多个相同长度的回文子串时,此算法会返回第一个找到的最长回文子串。

你可能感兴趣的:(算法,java,leetcode)