Nyoj 5 Binary String Matching
2014-04-08 14:03
253 查看
题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=5
修正的nextval写法:
非修正:
修正的nextval写法:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 1010; const int MAXM = 11; 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 ans) { int Len1 = strlen(str1); int Len2 = strlen(str2); int i = 0, j = 0; Get_NextVal(str1); while(i < Len2) { if(j == -1 || str2[i] == str1[j]) ++i, ++j; else j = nextval[j]; if(j >= Len1) { ans++; j = nextval[j]; } } return ans; } int main() { char str1[MAXM], str2[MAXN]; int T; scanf("%d", &T); while(T--) { scanf("%s", str1); scanf("%s", str2); printf("%d\n", KMP(str1, str2, 0)); } return 0; }
非修正:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int MAXN = 1010; const int MAXM = 11; int next[MAXM]; void Get_Next(char* str) { int Len = strlen(str); int i = 0, j = -1; next[0] = -1; while(i < Len) { if(j == -1 || str[i] == str[j]) { ++i, ++j; next[i] = j;//表示下一个与i向匹配的位置 } else j = next[j]; } } int KMP(char* str1, char* str2, int ans) { int Len1, Len2; Len1 = strlen(str1); Len2 = strlen(str2); int i = 0, j = 0; Get_Next(str1); while(i < Len2) { if(j == -1 || str2[i] == str1[j]) ++i, ++j; else j = next[j]; if(j >= Len1) { ans++; j = next[j]; } } return ans; } int main() { int T; char str1[MAXM], str2[MAXN]; scanf("%d", &T); while(T--) { scanf("%s", str1); scanf("%s", str2); printf("%d\n", KMP(str1, str2, 0)); } return 0; }
相关文章推荐
- NYOJ 5 Binary String Matching
- NYOJ-5:Binary String Matching
- NYOJ 5-Binary String Matching
- nyoj-5 Binary String Matching
- nyoj 3 Binary String Matching
- NYOJ 5 Binary String Matching(数据结构)
- NYOJ 题目5 Binary String Matching
- NYOJ-Binary String Matching
- NYOJ 5 Binary String Matching
- nyoj_5 Binary String Matching
- nyoj 5 Binary String Matching(kmp)
- nyoj 5Binary String Matching
- nyoj-5-Binary String Matching
- nyoj 5:Binary String Matching
- nyoj5Binary String Matching
- nyoj-5-Binary String Matching
- NYOJ-----5---Binary String Matching(KMP)
- NYOJ-5-Binary String Matching
- NYOJ 5 Binary String Matching
- NYOJ5Binary String Matching(find函数用法)