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

问题描述

您可以使用最长的回文Manacher算法的O(n)时间!它的实现可以在这里 找到。

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

解决方法

例如字符串“ abaccddccefe”中的“ ccddcc”

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

算法1:

步骤:这是一种蛮力方法

  1. 对于i = 1到i小于array.length的2个for循环,
  2. 对于j = i + 1到j小于 array.length的-1
  3. 这样,您可以从数组中获取所有可能组合的子字符串
  4. 具有回文功能,可检查字符串是否为回文
  5. 因此,对于每个子字符串(i,j)都调用此函数(如果它是回文)将其存储在字符串变量中
  6. 如果找到下一个回文子字符串,并且该子字符串大于当前子字符串,则将其替换为当前子字符串。
    最后,您的字符串变量将得到答案
    问题:1.该算法运行时间为O(n ^ 2)。

算法2:

  1. 反转字符串并将其存储在不同的数组中
  2. 现在找到两个数组之间最大的匹配子字符串
  3. 但这也需要O(n ^ 2)时间
    你们能想到一种运行时间更好的算法吗?如果可能的话O(n)时间

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...