标签:++ length style next out code 模板 als space
#include <cstdio> #include <cstring> #include <iostream> #include <queue> #include <map> using namespace std; int Next[100010]; string s[100010]; void getNext(string s) { int i,j; i=0; j=-1; int len=s.length(); Next[0]=-1; while(i<len && j<len) { if(j==-1 || s[i]==s[j]) Next[++i]=++j; else j=Next[j]; } } bool kmp(string m,string s) { getNext(s); int i,j; i=j=0; int mlen=m.length();// i int slen=s.length();// j while(i<mlen && j<slen) { if(j==-1 || m[i]==s[j]) i++,j++; else j=Next[j]; } if(j==slen) return false; return true; } int kmp_count(string m,string s) // 记录子串的出现次数 { getNext(s); int i,j; i=j=0; int mlen=m.length();// i int slen=s.length();// j int ret=0; while(i<mlen) { if(j==-1 || m[i]==s[j]) i++,j++; else j=Next[j]; if(j==slen) { j=Next[j]; ret++; } } return ret; } int main() { cin.sync_with_stdio(false); int t; cin>>t; while(t--) { string m,s; cin>>s>>m; cout<<kmp_count(m,s)<<endl; } return 0; }
标签:++ length style next out code 模板 als space
原文地址:http://www.cnblogs.com/z1141000271/p/7549912.html