题意是给出文本串和模式串 玩模式串在文本串中出现多少次 把KMP稍稍改动下就ok了
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; char str1[10010],str[1000100]; int next[10010]; int deal(int len) { next[0]=-1; int j=0; int k=-1; while(j<len-1) { if(k==-1||str1[k]==str1[j]) { ++j; ++k; next[j]=k; } else k=next[k]; } return 0; } int main() { int T,i,j; scanf("%d",&T); while(T--) { scanf("%s%s",str1,str); int len1=strlen(str1); int len2=strlen(str); deal(len1); i=j=0; int k=0; while(i<len2) { if(j==-1||str[i]==str1[j]) { i++; j++; } else j=next[j]; if(j==len1) { k++; i--;j--; j=next[j]; } } printf("%d\n",k); } return 0; }
时间: 2024-10-10 13:43:03