NYOJ 5 Binary String Matching
2016-11-27 20:43
309 查看
一道简单的字符串匹配题
方法一:STL C++的字符串 确实好用
方法二:KMP算法
方法一:STL C++的字符串 确实好用
#include<iostream> #include<string> using namespace std; int main() { int n; cin>>n; while(n--) { int cnt = 0, m = 0; string a, b; cin>>a>>b; m = b.find(a,0); while(m != string::npos) { m = b.find(a,m+1); cnt++; } cout<<cnt<<endl; } }
方法二:KMP算法
#include<cstdio> #include<cstring> int nextval[200]; void get_next(char a[])//得到next数组; { int len; int i=0,j=-1; nextval[0]=-1; len=strlen(a); while(i<=len) { if(j==-1 || a[i]==a[j]) { ++i; ++j; if(a[i]==a[j]) nextval[i] = nextval[j]; //把回溯的内容全换成是next数组; else nextval[i] = j; } else j=nextval[j]; } } int kmp(char a[],char b[])//kmp的主体函数 { int i=0,j=0,count=0; int lena,lenb; lena=strlen(a); lenb=strlen(b); get_next(a); while(i<=lenb) { if(j==-1 || a[j]==b[i]) { ++i; ++j; } else j=nextval[j]; if(j>=lena) { count++; j=nextval[j]; } } return count; } int main() { int n; char a[20],b[1200]; scanf("%d",&n); while(n--) { scanf("%s\n%s",a,b); printf("%d\n",kmp(a,b)); } return 0; }
相关文章推荐
- NYOJ-----5---Binary String Matching(KMP)
- nyoj 5 Binary String Matching<水过>
- nyoj -5 Binary String Matching 【kmp】
- NYOJ Binary String Matching
- NYOJ5之Binary String Matching
- nyoj 5:Binary String Matching
- NYOJ 题目5 Binary String Matching
- NYOJ5Binary String Matching(find函数用法)
- NYOJ 5 Binary String Matching
- 【NYOJ-5】 Binary String Matching
- NYOJ 5 Binary String Matching (kmp 字符串匹配)
- NYOJ-Binary String Matching
- NYOJ 5 Binary String Matching
- NYOJ 5 Binary String Matching
- Nyoj 5 Binary String Matching
- NYOJ 5 Binary String Matching
- nyoj5 Binary String Matching(KMP)
- nyoj5 Binary String Matching
- NYOJ题目5---Binary String Matching
- NYOJ 5 Binary String Matching