例如字符串“ abaccddccefe”中的“ ccddcc”
我想到了一个解决方案,但它运行在 O (n ^ 2)时间内
算法1:
步骤:
这是一种蛮力的方法
- 有两个 for 循环
对于 i = 1到 i 小于 array.length -1
对于 j = i + 1 to j 小于 array.length
- 通过这种方式,您可以从数组中获得每个可能组合的子字符串
- 有一个回文函数来检查一个字符串是否是回文
- 因此对于每个子字符串(i,j)调用这个函数,如果它是一个回文,则将它存储在一个字符串变量中
- 如果您找到下一个回文子字符串,并且它大于当前子字符串,请将其替换为当前子字符串。
- 最后,字符串变量将得到答案
问题:
这个算法在 O (n ^ 2)时间内运行。
算法2:
- 反转字符串并将其存储在不同的数组中
- 现在查找两个数组之间最大的匹配子字符串
- 但是这也运行在 O (n ^ 2)时间内
你们能想到一个运行时间更好的算法吗? 如果可能的话,O (n)时间