【发布时间】:2012-08-07 20:30:49
【问题描述】:
尝试解决以下问题:
给定一个任意长度的字符串,找出在字符串中出现多次且没有重叠的最长子字符串。
例如,如果输入字符串是ABCABCAB,那么正确的输出应该是ABC。你不能说ABCAB,因为这只会在两个子字符串重叠的地方出现两次,这是不允许的。
对于包含几千个字符的字符串,有什么方法可以相当快速地解决这个问题?
(在有人问之前,这不是功课。我正在寻找优化 Lindenmayer 分形渲染的方法,因为它们往往会花费大量时间来使用幼稚的海龟图形系统在高迭代级别进行绘制。 )
【问题讨论】:
-
ABC会以某种方式被评为高于BCA或CAB,它们也具有相同的长度吗? -
字符串
AAA的答案是什么?A或AA? -
@Piotrek: 'A',因为没有不重叠的多个
AA的集合。 -
@RobotWoods:不是字典顺序;我主要只是以它为例。任何长度相等的子串都应该同样有效。如果您需要决胜局,获胜者是出现次数最多的获胜者。如果您仍然需要决胜局,那么(这完全是任意的)获胜者是第一次迭代在字符串中最早发生的人。
标签: string algorithm language-agnostic