HELP!
查看原帖
HELP!
1268529
jiangbaolin楼主2024/5/21 17:38

最后一个点TLE

#include<iostream>
#include<cstring>
using namespace std;
char s1[1000001],s2[1000001];
int l1,l2,kmp[1000001],s,k;
bool tf=true;
int main(){
	scanf("%s%s",s1+1,s2+1);
	l1=strlen(s1+1);
	l2=strlen(s2+1);
    for(int i=2;i<=l2;i++){
		while(k>0 && s2[i]!=s2[k+1]){
			k=kmp[k];
		}
		if(s2[i]==s2[k+1]){
			k++;
		}
		kmp[i]=k;
	}
	for(int i=1;i<=l1;i++){
		for(int j=1;j<=l2;j++){
			if(s1[j+i-1]!=s2[j]){
				tf=false;
				break;
			}
		}
		if(tf==true){
			printf("%d\n",i);
		}
		tf=true;
	}
	for(int i=1;i<l2;i++){
		printf("%d ",kmp[i]);
	}
	printf("%d",kmp[l2]);
	return 0;
}
2024/5/21 17:38
加载中...