【发布时间】:2016-12-05 06:34:18
【问题描述】:
给你一个字符串,例如"acdfdcqqc" 并且需要创建一个算法来找到最大的回文子串,在我们的例子中是 "cdfdc"。通过创建一个大小为 2n 的数组并每次计算以该点为中心的最大回文的长度,很容易设计一个 O(n^2) 算法,即:
a - c - d - f - d - c - q - q - c
1 0 1 0 1 0 5 0 1 0 1 0 1 4 1 0 1
对于 2n 个可能的起点中的每一个,我在两个方向上移动,找到从该位置开始的最大回文的长度。因此,对于 2n 个操作中的每一个,我最多执行 O(n) 个操作,因此时间复杂度为 O(n^2)。
我知道它可以使用更高级的算法在线性时间内完成:https://en.wikipedia.org/wiki/Longest_palindromic_substring。
但假设我们正在处理的字符串是从自然英文文本中提取的。如果我们在英文文本中随机选择一个位置,我们可能期望找到的预期对称性非常低。我什至会说预期的对称性在每一侧都少于一个字符。 因此,我可以说我的算法正在执行 2n 次预期的恒定时间操作,从而使算法平均为 O(n) 吗?
【问题讨论】:
标签: algorithm dynamic-programming palindrome