您好,登錄后才能下訂單哦!
在Java中,要快速定位回文子串,可以使用Manacher算法。這是一種線性時間復雜度的算法,可以在O(n)時間內找到字符串中的所有回文子串。以下是使用Manacher算法的基本步驟:
public static String preprocess(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
sb.append('#').append(s.charAt(i));
}
sb.append('&');
return sb.toString();
}
public static int[] manacher(String s) {
String preprocessed = preprocess(s);
int n = preprocessed.length();
int[] P = new int[n];
int center = 0, right = 0;
for (int i = 0; i < n; i++) {
if (i < right) {
int mirror = 2 * center - i;
P[i] = Math.min(right - i, P[mirror]);
}
int left = i - (P[i] + 1);
int right = i + (P[i] + 1);
while (left >= 0 && right < n && preprocessed.charAt(left) == preprocessed.charAt(right)) {
P[i]++;
left--;
right++;
}
if (i + P[i] > right) {
center = i;
right = i + P[i];
}
}
return P;
}
public static List<String> findPalindromes(String s) {
List<String> result = new ArrayList<>();
int[] P = manacher(s);
int n = s.length();
for (int i = 0; i < n; i++) {
if (P[i] % 2 == 1) {
int center = i;
int left = center - (P[i] / 2);
int right = center + (P[i] / 2);
result.add(s.substring(left, right + 1));
}
}
return result;
}
現在,你可以使用findPalindromes
方法在給定的字符串中查找所有的回文子串。例如:
public static void main(String[] args) {
String s = "babad";
List<String> palindromes = findPalindromes(s);
System.out.println("Palindromes in \"" + s + "\": " + palindromes);
}
輸出:
Palindromes in "babad": [baba, bab, a]
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。