美文网首页
最长回文子串

最长回文子串

作者: 柳仁儿 | 来源:发表于2017-09-07 18:14 被阅读0次

最长回文子串

public class Manacher {

public static int min(int a, int b) {

return a < b ? a : b;

}

public static void manacher(char[] s, int[] p) {

int size = s.length;

p[0] = 1;

int id = 0;

int mx = 1;

for (int i = 1; i < size; i++) {

if (mx > i) {

p[i] = min(p[2 * id - i], mx - i);

} else {

p[i] = 1;

}

for (; (i + p[i] <= size - 1) && (s[i + p[i]] == s[i - p[i]]);) {

p[i]++;

}

if (mx < i + p[i]) {

mx = i + p[i];

id = i;

}

}

}

public static void main(String[] args) {

String str = "ABCCBC";

char[] s = new char[str.length() * 2 + 2];

int[] p = new int[s.length];

s[0] = '$';

for (int i = 0; i < str.length(); i++) {

s[i * 2 + 1] = '#';

s[i * 2 + 2] = str.charAt(i);

}

s[s.length - 1] = '#';

manacher(s, p);

int index = 0;

int max = 0;

for (int i = 0; i < s.length; i++) {

if (p[i] > max) {

index = i;

max = p[i];

}

}

System.out.println("字符串"+str);

System.out.println("最长回文子串的位置为:" + (index - p[index]));

System.out.println("最长回文子串的长度为:" + (max - 1));

System.out.println("最长回文子串为:");

for (int i = index - p[index] + 1; i < index + p[index]; i++) {

if (i % 2 == 0) {

System.out.print(s[i]);

}

}

}

}

输出结果:

字符串ABCCBC

最长回文子串的位置为:2

最长回文子串的长度为:4

最长回文子串为:

BCCB

============================

字符串ABCDCBCDDE

最长回文子串的位置为:2

最长回文子串的长度为:5

最长回文子串为:

BCDCB

相关文章

  • 最长回文子串

    最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...

  • 字符串算法

    最长公共前缀 最长回文串 最长回文子序列 最长公共子串 反转单词顺序列 反转字符串 字符串转数字 IP-int互转

  • 打卡-最长回文子串

    最长回文子串(中等)

  • 最长回文子序列

    该问题区别于最长回文子串,子串必须是连续的,而子序列则可以跳跃,例如AABCAA的最长回文子串为AA,但是它的最长...

  • Manacher算法

    最长回文子串问题# 给定一个字符串,找出最长的回文子串,如"waabwswbfd",则最长子串为bwsb. 中心试...

  • 最长回文子串问题—Manacher算法

    最长回文串问题是一个经典的算法题。 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。如果...

  • LeetCode 第647题:回文子串

    1、前言 2、思路 此题与最长回文子串很像,只不过那个是求最长的回文子串,而这个是求回文子串的数目。但是他们的解法...

  • C语言实现求最长回文子串

    最长回文子串的概念 回文串是指正序和反序都一样的字符串,例如:Str1 = "AbbA",则Str1的最长回文子串...

  • Manacher's Algorithm算法分析Java

    Manacher's Algorithm俗称马拉车算法,对于求字符串中最长回文子串效率极高。 在求最长回文子串的时...

  • Manacher 算法学习笔记

    前言 给定一个字符串,求出其最长回文子串。例如:s="abcd",最长回文长度为 1;s="ababa",最长回文...

网友评论

      本文标题:最长回文子串

      本文链接:https://www.haomeiwen.com/subject/tpzijxtx.html