hdu 1686(标准的kmp,可当模板)
2011-02-19 18:58
190 查看
/* 题意:给两个字符串a,s,判断a在s里出现的个数 */ #include <stdio.h> #include <string.h> int next[10005]; char a[10005]; char s[1000005]; int n,len_a,len_s; void Get_Next() { a[0] = '#';//因为是a+1,如果a[0]不存在,那strlen(a) = 0 ; !!!!!!!!!!! len_a = strlen(a); len_s = strlen(s); next[1] = 0; int j = 0; for(int i=2;i<=len_a;i++) { while(j > 0 && a[j+1] != a[i])// j+1要理解,j因为要连续向前找next[j],而不是j+1 j = next[j]; if(a[j+1] == a[i]) j++; next[i] = j; } } int Str_Match() {//跟Get_Next类似,理解后可手写! int j = 0; int num = 0; for(int i=0;i<len_s;i++) { while(j>0 && a[j+1]!=s[i]) j = next[j]; if(a[j+1] == s[i]) j++; if(j == len_a - 1){ j=next[j]; num++; } } return num; } int main() { scanf("%d",&n); while(n--) { getchar(); scanf("%s %s",a+1,s);//!!!!这用的是a+1,为的是字符串位置跟实际位置相对应,函数好写一点 Get_Next(); printf("%d\n",Str_Match()); } return 0; }
相关文章推荐
- HDU-1686 Oulipo(kmp模板题)
- KMP算法模板及问题解决(HDU 1711)(hihocoder 1015 KMP)(HDU 1686)(POJ3461)(HDU1358)
- hdu 1686 Oulipo -- (KMP模板题)
- Oulipo - HDU 1686 (KMP模板题)
- HDU- KMP模板题 - 1686 Oulipo - 2087 剪花布条 - 3746 Cyclic Nacklace
- HDU 1686 Oulipo kmp模板
- hdu 1686 Oulipo (KMP模板)
- HDU 1686Oulipo (kmp模板题)
- HDU 1686 Oulipo【KMP模板题】
- HDU--1686(kmp,模板题)
- HDU 1686 kmp模式串计数
- POJ 3461 && HDU 1686 Oulipo(kmp)
- hdu 1686 Oulipo(kmp)
- KMP板子题 HDU - 1686
- hdu1686--kmp入门题
- HDU - 1686 Oulipo(KMP)
- HDU 2087剪花布条(KMP入门模板题)
- hdu 1686(kmp)
- HDU 1686 Oulipo(KMP)
- hdu 1686 Oulipo(KMP)