KMP30pts求调,输入10^4 个字符调用 strlen 返回4094
  • 板块灌水区
  • 楼主SunsetVoice
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/21 11:05
  • 上次更新2024/4/21 13:16:18
查看原帖
KMP30pts求调,输入10^4 个字符调用 strlen 返回4094
659460
SunsetVoice楼主2024/4/21 11:05
#include<bits/stdc++.h>
using namespace std;
char s1[200001] = {0},s2[200001] = {0};
int n1,n2;
int nxt[200001] = {0};
int main(){
	cin>>s1;
	cin>>s2;
	int n1 = strlen(s1),n2 = strlen(s2);
	int dnum = 0;
	for(int i = 1;i<n2;i++){
		if(s2[i]==s2[dnum]){
			nxt[i] = nxt[i-1]+1;
			dnum++;
		}else{
			if(!dnum){
			  	nxt[i] = 0;
			}else{
				dnum = nxt[dnum-1];
				if(s2[i]==s2[dnum]){
					nxt[i] = dnum+1;
					dnum++;
				}
			}
		}
	}
	int tik2 = 0,tik1 = 0;
	while(tik1<n1){
		if(s2[tik2]==s1[tik1]){
			tik2++;
			tik1++;
		}else{
			if(tik2==0){
				tik1++;
			}else{
				tik2 = nxt[tik2-1];
			}
		}
		if(tik2==n2){
			cout<<tik1-tik2+1<<endl;
		}
	}
	for(int i = 0;i<n2;i++){
		cout<<nxt[i]<<" ";
	}
	cout<<endl;
	return 0;
}

30ptsID

2024/4/21 11:05
加载中...