评论
# re: 关于String里indexOf()的一些思考
2010-09-30 11:36
denniis
理论上说简单的匹配算法是O(m*n)的时间复杂度,而KMP可以达到O(m+n),在我的测试里,KMP的实现也很难超过简单的匹配算法,这个跟测试数据有一定关系,只有在m和n足够大,也就是匹配串和被匹配字符串足够长的时候,KMP算法才能体现出来一些优势来。
想超过简单匹配,可以尝试下BM、Shift-And、Shift-Or之类的匹配算法。 回复 更多评论
# re: 关于String里indexOf()的一些思考
2010-09-30 16:41
changedi
@denniis
哦,谢谢Denniis大牛的指教。我一直觉得在寻找200长度的模式串已经算是长的了。
有时间的话我会看看关于String search相关的paper的。 回复 更多评论
# re: 关于String里indexOf()的一些思考[未登录]
2010-12-31 00:11
tony
程序好像有点问题:
21 while((pat.charAt(j)==pat.charAt(i+1))&&(i>=0)) i = f[i];
应该是 不等于吧
测试了一下
s = "abxabababc"
pat = "ababc"
输出是: -1
结果应该是:5 回复 更多评论
# re: 关于String里indexOf()的一些思考
2011-01-01 20:01
changedi
@tony
没错,改过了,谢谢提示 回复 更多评论
# re: 关于String里indexOf()的一些思考
2012-12-29 14:56
dizh
while((pat.charAt(j)==pat.charAt(i+1))&&(i>=0)) i = f[i];
22 if(pat.charAt(j)!=pat.charAt(i+1)) f[j] = i + 1;
你写错了吧,应该是while里面是!=,if是== 回复 更多评论
# re: 关于String里indexOf()的一些思考
2012-12-29 14:59
dizh
还是说K的取值觉定了?
f[j] = k < j where k is the maximum of pat[0..k] == pat[j-k..j]
你这里说要去最大K,你那么做是对的,可是书上说要取最小K,当然得按照我和tony说的。 回复 更多评论
# re: 关于String里indexOf()的一些思考
2014-04-15 16:18
seki
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
aaaaaaaaaab
第一行的a你弄1w个,第2行的a你弄1k个,再试试... 回复 更多评论
# re: 关于String里indexOf()的一些思考
2015-04-24 18:15
ss
@seki
KMP主要对字符重复性较高的字符串有着高性能,其他的情况,性能应该不会有很大差距。 回复 更多评论
# re: 关于String里indexOf()的一些思考[未登录]
2016-02-26 16:43
z
是因为charAt函数太耗时了 可以先toCharArray再访问数组 回复 更多评论