用于做类似:给定A,B两个字符串,在主串A中查找B是否出现,出现次数,出现位置。类似的题
inline int work() { int ans=0; int j=0; for(int i=0;i<la;i++) { while(j>0&&a[i+1]!=b[j+1])//不匹配 j=kmp[j]; if(b[j+1]==a[i+1])//匹配 j++; if(j==lb)//发现包含B串,并重新匹配 { wei[++ans]=i; j=0; } } return ans; }
求kmp数组(相当于B串自我匹配的过程---沃兹吉梭德
inline void kp() { memset(kmp,0,sizeof(kmp)); kmp[1]=0; int j=0; for(int i=1;i<la;i++) { while(j>0&&a[i+1]!=a[j+1]) j=kmp[j]; if(a[j+1]==a[i+1]) j++; kmp[i+1]=j; } }
恩,没了