【发布时间】:2016-08-01 17:28:54
【问题描述】:
我需要找出字符串中最长的非回文子字符串(一个本身不是回文的字符串,不管它是否有任何子字符串),在 O(n**2) 或更短的时间内时间。
我可以想出简单的蛮力算法,找到所有可能的子串 (O(n ** 2)),然后对每个这样的子串检查它是否是回文 (O(n)),取整体复杂度为 O(n**3)。
找出最长回文子串和序列有 O(n**2) 个变体,但我无法在此处重用它们来找出解决方案。
如何在 O(n**2) 时间内完成?
【问题讨论】:
-
提示:如果你从回文中删除第一个字符,你会得到一些不是回文的东西——除了一个很容易检测到的非常特殊的情况。
-
什么是非回文子串?一个本身不是完整回文的子串?因为在那种情况下,问题听起来很简单。试着用一些例子在纸上解决它。
-
已编辑问题。是的,简,我知道。具体的设置是困扰我的。
-
为什么那个特定的设置困扰着你?告诉我,你觉得这个系列是什么?
-
据我所知,有多种方法可以从最长的回文子字符串中获取非回文子字符串 - 在开头或结尾添加字符,从开头删除字符,或从头开始,或两者兼而有之。想不通。
标签: string algorithm palindrome