随笔分类 - KMP
摘要:做这道题的时候,我对KMP也是没有什么概念。。然后学长说,利用next数组就可以。思考了一下,觉得next数组大概是个这么回事:next数组是在第i个字符“失配”的情况下,跳转到next[i]所指向的第j个字符,再进行匹配。这样来看,既然可以跳转,那就说明i前面的字符一直到j后面一个字符这k个字符与j前面的k个字符就是一模一样的!如果不是这样,那么i失配的情况下,就不可以跳到j字符。 #include<stdio.h>#include<string.h>char s1[100005],s2[50005];int next[100005];void get_next(ch
阅读全文
摘要:#include<stdio.h>#include<string.h>long s[1000005],t[10005];int next[10005],m,n;void get_next(long t[10005]){ int i=0,j=-1;next[0]=-1; while(i<n) { if(j==-1||t[i]==t[j]) {++i; ++j; next[i]=j; } else j=next[j]; }}int index_kmp(long s[1000005],long...
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2087就是给你一个串和一个模式串,问,这个串中有多少个模式串。就是KMP啦,稍微修改一下就是匹配成功后返回匹配成功后的最后一个字符的位置的后一位,而不是第一位。因为是剪纸啦,不能剪过的再剪一次是吧。。 1 #include<stdio.h> 2 #include<string.h> 3 int next[1005]; 4 void get_next(char t[1005]) 5 { 6 int i=0,j=-1,len; 7 next[0]=-1; 8 len=strlen
阅读全文

浙公网安备 33010602011771号