KMP模板

next数组表示该位置最长前缀后缀

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MAX 1000010
#define INF 0x3f3f3f3f
#define EXP 1e-9

using namespace std;

typedef long long ll;

int n; 
char s[MAX];
char w[MAX];
int f[MAX];

int main(){
	scanf("%d",&n);
	while(n--){
		scanf(" %s",s);
		scanf(" %s",w);
		int ls=strlen(s);
		int lw=strlen(w);
		f[0]=-1;
		for(int i=1;i=0))
				j=f[j];
			if(s[j+1]==s[i])f[i]=j+1;
			else f[i]=-1;
		}
		//for(int i=0;i

next数组表示下一位最长前缀后缀

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MAX 1000010
#define INF 0x3f3f3f3f
#define EXP 1e-9

using namespace std;

typedef long long ll;

int t;
char s[MAX];
char w[MAX];
int f[MAX];

int main(){
	scanf("%d",&t);
	while(t--){
		scanf(" %s %s",s,w);
		int ls=strlen(s);
		int lw=strlen(w);
		f[0]=f[1]=0;
		for(int i=1;i

 

 

你可能感兴趣的:(KMP)