单词替换
1.kmp找到后替换即可
1 #include<iostream> 2 #include<cstring> 3 #include<string> 4 #include<cstdio> 5 using namespace std; 6 7 int nxt[5000005],ans[5000005]; 8 char s[5000005],p[5000005],q[5000005]; 9 10 void getNext(char *p){ 11 nxt[0]=-1; 12 int len=strlen(p); 13 for(int i=0;i<len;i++){ 14 int k=nxt[i]; 15 while(k!=-1&&p[i]!=p[k]) k=nxt[k]; 16 nxt[i+1]=k+1; 17 } 18 } 19 20 void kmp(char *s,char *p){ 21 getNext(p); 22 memset(ans,-1,sizeof(ans)); //!!!! 23 int temp=0,t=0,lens=strlen(s),lenp=strlen(p); 24 while(1){ 25 int i=temp,j=0; 26 while(i<lens&&j<lenp){ 27 while(j!=-1&&s[i]!=p[j]) j=nxt[j]; 28 ++i; 29 ++j; 30 } 31 if(j==lenp){ 32 ans[t++]=i-j; 33 temp=i; 34 } 35 if(i==lens) break; 36 } 37 } 38 39 int main() 40 { int n;scanf("%d",&n); 41 while(n--){ 42 scanf("%s%s%s",s,p,q); 43 kmp(s,p); 44 int m_lens=strlen(s),m_lenp=strlen(p),t=0; 45 for(int i=0;i<m_lens;i++){ 46 if(i!=ans[t]) printf("%c",s[i]); 47 else{ 48 printf("%s",q); 49 t++; 50 i+=m_lenp-1; 51 } 52 } 53 printf("\n"); 54 } 55 return 0; 56 }