首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

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

2012-03-04 
最长的重复子串,这个问题做不到O(n)吧?一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzac

最长的重复子串,这个问题做不到O(n)吧?
一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc。
这个问题做不到O(n)吧?


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

热点排行