我需要在字符串中找出最长的非回文子串(一个本身不是回文的字符串,无论是否有任何子串),在O(n ** 2)或更少时间。
我可以提出简单的强力算法,找到所有可能的子串(O(n ** 2)),然后对每个这样的子串检查是否是回文(O(n)),考虑到整体的复杂性到O(n ** 3)。
有O(n ** 2)个变种找出最长的回文子串和序列,但我无法重复使用它们来找出解决方案。
我如何在O(n ** 2)时间内完成?
答案 0 :(得分:6)
由于已经发布了答案,让我将提示转化为实际答案:
首先,检查完整字符串是否为:
然后:
答案 1 :(得分:-2)
设s,e是字符串中的位置。
你可以通过检查string[s] == string[e]
和子串s + 1,e-1也是palindrom(特殊情况下的单个字符s==e
和空字符串{{1}来判断子字符串s,e是否为palindrom到真实)。
所以最简单的实现是如上所述制作递归函数并记住结果(将它们存储在外部矩阵中)。
如果您对迭代小心谨慎,也可以迭代地进行迭代(这样您只需要先前计算的结果)。
两者都将填充O(N ^ 2),并且单个计算是微不足道的。