【发布时间】:2013-09-13 18:27:40
【问题描述】:
我正在寻找一种算法来找到给定字符串的显性循环子字符串。
一个循环子串:
- 相邻重复两次或更多次的子字符串。
一个显性循环子串:
- 重复次数最多的子串占优势
- (相邻重复出现的次数相同)
- 最长的子串占主导地位
- (关于长度和相邻重复的关系)
- 最先出现的子字符串占主导地位
示例 1:
prefixgarbagecyclecyclecyclecyclesufixgarbage- 返回
cycle:=>cycle是重复次数最多的相邻子串
示例 2:
prefixgarbagecyclepadinggarbagecyclesufixgarbage- 返回
g:=> 出现的cycle不相邻重复,g相邻重复两次
示例 3:
prefixgarbagecyclecyclepadinggarbageprefixgarbage- 返回
cycle:=>cycle&g重复两次相邻但cycle比g长
示例 4:
prefixgarbagecyclecyclecycleroundroundroundprefixgarbage- 返回
cycle:=>cycle&round相邻重复三次且长度相同,但cycle首先出现
示例 5:
abcdefghijklmnopqrstuvqxyz- 返回
<empty string>,因为没有重复的相邻子串
实现该算法的最佳方法是什么?
【问题讨论】:
-
为什么您的示例 1 没有
cyclecycle作为主要子字符串?它重复了两次...... -
因为
cycle重复了 4 次,所以重复比长度更重要 -
您自己对如何处理这个问题有任何想法吗?您在字符串处理中使用的任何最喜欢的语言?您所说的“最佳实施方法”是什么意思?一种非常有效的方法是“尝试并修改直到它起作用”,但这可能不是您要问的。
-
@Lee Meador 返回
a:=>a在xyzbaaabaaabaaaaxyz中相邻重复 4 次 -
@Floris 是一种明显适用的技术:ie 分而治之,动态编程,等.
标签: string algorithm language-agnostic substring cycle