最長迴文子串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。