摘要: 这题琢磨了挺长的时间。需要理解next[]表示了什么;next[i]代表了前缀和后缀的最大匹配的值,也就是个数。len-next[len]表示循环节的长度;比如abcab int fl=len-next[len]=3;循环节长度为3,即cab。然后int len=strlen(s)=5;如果len... 阅读全文
posted @ 2015-08-11 15:09 sweat123 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 2个字符长合并在一起即可。要注意next[n]的值要小于初始的两个字符串的长度;//next[]存的是之前相同的长度。//也是位置,只是s[i]不一定和s[next[i]]相同 //但是i之前的和next[i]之前相同的个数==next[i];#include#include#define maxn... 阅读全文
posted @ 2015-08-11 11:02 sweat123 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 稀里糊涂1A开心。我做了2次kmp,先第一次利用next[],由于next[]前面一小段一直是一样的,所以可以根据这个来找。然后就找到了开头和结尾,还缺中间的部分。中间的部分就是通过开头部分去模式匹配,如果有就直接输出,break就可以。(因为开始长度最长)#include#include#defi... 阅读全文
posted @ 2015-08-11 09:24 sweat123 阅读(143) 评论(0) 推荐(0) 编辑