#11与#13超时
查看原帖
#11与#13超时
1263248
Zhuajie楼主2024/3/30 11:49
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int KMP(char* big, char* small, int NEXT[]);
void  Next(int Next[], char* S2);
int main() 
{
	char S1[1000010];
	char S2[1000010];
	cin>>S1;
	cin>>S2;
	int next[1000010];
	memset(next, 0, sizeof(next));
	Next(next, S2);
	KMP(S1, S2, next);
	for (int i = 0; i < strlen(S2); i++) printf("%d ", next[i]);
	return 0;
}
int KMP(char* big, char* small, int NEXT[])
{
	char cnt[50];
	for (int i = 0, j = 0; i < strlen(big); i++) {
		while (j > 0 && big[i] != small[j]) {
			j = NEXT[j - 1];
		}
		if (big[i] == small[j])  j++;
		if (j == strlen(small)) {
			printf("%d\n", i-j+2);
		}
	}
	return 0;
}
void  Next(int Next[], char* S2)
{
	Next[0] = 0;
	for (int i = 1, j = 0; i < strlen(S2); i++) {
		while (j > 0 && S2[j] != S2[i]) {
			j = Next[j - 1];
		}
		if (S2[j] == S2[i]) j++;
		Next[i] = j;
	}
}
2024/3/30 11:49
加载中...