最長迴文子串java

以下是一個Java程式,用於找到給定字元串中最長的回文子串:

public class LongestPalindromicSubstring {
    public static void main(String[] args) {
        String s = "abcba";
        System.out.println("最長的回文子串是:" + findLongestPalindromic(s));
    }

    public static String findLongestPalindromic(String s) {
        int n = s.length();
        for (int len = 1; len <= n / 2; len++) {
            if (isPalindrome(s, 0, len - 1)) {
                if (len * 2 > n) {
                    return s.substring(len - 1, len + 1);
                } else {
                    String left = findLongestPalindromic(s.substring(len));
                    String right = findLongestPalindromic(s.substring(0, len * 2 - 1));
                    return (left != null && right != null) ? (left + right) : null;
                }
            }
        }
        return null;
    }

    private static boolean isPalindrome(String s, int start, int end) {
        while (start < end) {
            if (s.charAt(start) != s.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}

這個程式使用了回文子串的經典方法,通過檢查子串的兩端是否對稱來判斷它是否是回文子串。首先,我們使用一個循環遍歷所有可能的子串長度,並檢查是否為回文子串。如果找到了一個回文子串,我們就需要繼續檢查它的右半部分和左半部分是否都是回文子串。如果右半部分和左半部分都是回文子串,那麼它們可以拼接在一起形成一個更長的回文子串。這個程式返回最長的回文子串,如果沒有找到則返回null。