这个算法也看了大半天了,仔细看过两个人的博客,一个是传说中的Matrix67,另一个是阮一峰,个人感觉阮一峰的非常好理解,但是和百度其他人的做法有些出入,不过仍然是首选。Matrix67大神的也还可以,就是P[]的解释太复杂了,一整段文字带符号看得人欲仙欲死。
下面是两人的链接:
http://kb.cnblogs.com/page/176818/
http://www.matrix67.com/blog/archives/115
进入正题,这个算法不好理解的地方只有一个,就是预处理的next[]。看过阮一峰的博客之后,我感觉可以把next[]中存放的东西叫做循环的跳跃量,就是对长字符串的遍历不再以i++作为条件,而是以i+=next[j]作为条件。 这只是一种好理解的方法,真实意义还是要靠原博客去理解,而且这样写出来的预处理方法我总感觉不是O(m)的,还需要继续学习。
看了这么久,感觉头脑都不清醒了,有什么问题或细节上的错误欢迎指正。
import java.util.ArrayList;
import java.util.List;
public class General {
public static void KMP(String a,String b){
List<Integer&g