您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在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]
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。