当前位置: 代码迷 >> 高性能计算 >> 最长的重复子串,这个有关问题做不到O(n)吧
  详细解决方案

最长的重复子串,这个有关问题做不到O(n)吧

热度:1250   发布时间:2013-02-26 00:00:00.0
最长的重复子串,这个问题做不到O(n)吧?
一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc。
这个问题做不到O(n)吧?


------解决方案--------------------------------------------------------
我是这么想的,我们用一个表来记录子串的起始位置,从长度为一开始记录,每次记录替换上一次记录,每次查询从上一次记录开始,比如查找长度为3的重复子序列,我们就从长度为2的表中查找。这样做不考虑字符串比较就可以做到O(n),但是由于要进行字符串的比较就做不到O(n),那么我们可以想办法优化一下!
我们再拿一个表,给重复字串归一下类,里面记录了重复字串的上一个重复字串的ID,这样我们只要从后向前地找,就只要每次比较后一个字母就可以了,这样应该可以接近O(n)。
不知道我说的有没有漏洞,还望大家指正。
------解决方案--------------------------------------------------------
里面记录了重复字串的上一个重复字串的ID
我指的是相同类的重复字串
------解决方案--------------------------------------------------------
当然由于每次在同类中先找,要一个类中找完后要到下一个类中找,这样会导致我这样做还是无法实现O(n)
------解决方案--------------------------------------------------------
根本不可能,就一个找重复子串的花费就不是O(n) 了。
  相关解决方案