algorithm - 编写一个函数,返回给定字符串中最长的回文

标签 algorithm palindrome

e.g "ccddcc" in the string "abaccddccefe"

我想到了一个解决方案,但它在 O(n^2) 时间内运行

算法 1:

步骤: 这是一种蛮力方法

  1. 有2个for循环
    for i = 1 to i 小于 array.length -1
    对于 j=i+1 到 j 小于 array.length
  2. 这样你就可以从数组中得到所有可能组合的子串
  3. 有一个回文函数来检查一个字符串是否是回文
  4. 因此对于每个子串 (i,j) 调用此函数,如果它是回文,则将其存储在字符串变量中
  5. 如果找到下一个回文子串并且它大于当前回文子串,则将其替换为当前回文子串。
  6. 最后你的字符串变量会有答案

问题: 1. 该算法运行时间为 O(n^2)。

算法 2:

  1. 反转字符串并将其存储在不同的数组中
  2. 现在找到两个数组之间最大的匹配子串
  3. 但这也是在 O(n^2) 时间内运行

你们能想出一个运行时间更好的算法吗?如果可能 O(n) 时间

最佳答案

您可以在 O(n) 时间内使用 Manacher's Algorithm 找到最长的回文!它的实现可以在 herehere 中找到。

对于输入 String s = "HYTBCABADEFGHABCDEDCBAGHTFYW1234567887654321ZWETYGDE",它找到正确的输出,即 1234567887654321

关于algorithm - 编写一个函数,返回给定字符串中最长的回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115001/

相关文章:

algorithm - 时间复杂度嵌套循环

c++ - 指定扩展名文件的高效搜索算法 C/C++

java - Java 使用哪种算法进行乘法?

c - 在 C 中检查给定字符串是否为回文的有效方法

algorithm - 二叉搜索树将节点乘以 -1

algorithm - 如何找到两个图的最大公共(public)子图?

java - 在检查回文时如何忽略空格、标点符号和所有不同于字母的字符?

java - 忽略回文检查器的大小写

regex - 为什么这个递归正则表达式只在字符重复 2^n - 1 次时才匹配?

java - 反向比较回文解(破解编码面试)