70分最后的超时了
查看原帖
70分最后的超时了
871649
kkkllj楼主2022/12/5 20:22
#include <stdio.h>
#include <string.h>

#define Arrsize 1000000

void getNext(int Next[Arrsize], char s2[Arrsize]);

char s1[Arrsize];
char s2[Arrsize];
int Next[Arrsize];


int main() {

	
	scanf (" %s", s1 );
	
	scanf (" %s", s2 );


	getNext(Next, s2);

	int is1 = 0;
	int js2 = 0;
	
	while (is1 <= strlen(s1) - 1) {
		if (s1[is1] == s2[js2]) {
			int i = is1;
			int j = js2;
			while (s1[i] == s2[j]) {
				if (j == strlen(s2) - 1 + js2) {
					printf("%d\n", is1 + 1);
					break;
				}
				if (s1[i] != s2[j]) {
					break;
				}
				i++;
				j++;
			}
			is1++;
		}
		else if (js2 == 0) {
			is1++;
		}
		else {
			js2 = Next[js2 - 1];
		}
	}
	
	for (int i = 0; i<=strlen(s2)-1; i++) {
		printf("%d ", Next[i]);
	}

	return 0;
}

void getNext(int Next[Arrsize], char s2[Arrsize]) {
	int pre = 0;
	int last=1;

	Next[pre] = 0;

	while (last <= strlen(s2) - 1) {
		
		if (s2[pre] == s2[last]) {
			Next[last++] = ++pre;
		}
		else if (pre == 0) {
			Next[last] = 0;
			last++;
		}
		else {
			pre = Next[pre - 1];
		}
	}

}


2022/12/5 20:22
加载中...