KMP poj 3461
2013-12-03 11:30
204 查看
找一个模式串在主串中出现的次数
#include <iostream> #include <cstring> using namespace std; const int MAXN = 1000010; const int MAXM = 10010; int nextval[MAXM]; void Get_NextVal(char* str) { int len = strlen( str ); int i = 0, j = -1; nextval[0] = -1; while (i < len) { if (j == -1 || str[i] == str[j]) { ++i; ++j; if(str[i] == str[j]) nextval[i] = nextval[j]; else nextval[i] = j; } else j = nextval[j]; } } int KMP(char* str1, char* str2) { int i = 0, j = 0; int ans = 0; int len1 = strlen(str1); int len2 = strlen(str2); Get_NextVal(str1); while (i < len2) { if (j == -1 || str1[j] == str2[i]) { ++i; ++j; } else j = nextval[j]; if(j >= len1) { ans++; j = nextval[j];//这里不是从模式串的首部从新开始,而是从他的nextval开始 } } return ans; } int main() { int T; cin>>T; char str1[MAXM], str2[MAXN]; while (T--) { cin>>str1; cin>>str2; int sum = 0; sum = KMP(str1, str2); cout<<sum<<endl; } return 0; }
相关文章推荐
- POJ 3461 Oulipo(KMP)
- poj3461之kmp入门
- POJ 3461 Oulipo KMP
- POJ - 3461 Oulipo(KMP)
- kmp poj 3461
- POJ 3461 Oulipo(KMP经典)
- POJ 3461 Oulipo(KMP模板)
- poj 3461 Oulipo(KMP模板题)
- POJ 3461 Oulipo KMP
- POJ 3461 kmp 应用
- POJ-3461 Oulipo(KMP)
- poj 3461 Oulipo(KMP)
- Oulipo poj 3461 KMP连续匹配(有重合)
- POJ-3461(KMP模版题)
- POJ 3461 KMP
- poj 3461 Oulipo KMP
- POJ 3461 Oulipo ( KMP )
- POJ-3461-Oulipo-KMP
- poj 3461 Oulipo kmp
- poj--3461 Oulipo(KMP)