KMP 6pts 找不到错半天了求助QAQ
查看原帖
KMP 6pts 找不到错半天了求助QAQ
1420058
HaloisAWA楼主2024/11/8 22:27
#include<bits/stdc++.h>
using namespace std;
string s,p;
int Next[1000010],Back[1000010];
deque<char> st;
void getNext() {
	Next[0] = Next[1] = 0;
	for (int i = 1;i < p.size();i ++) {
		int j = Next[i];
		while (j && p[i] != p[j])
			j = Next[j];
		if (p[i] == p[j]) Next[i + 1] = j + 1;
		else Next[i + 1] = 0; 
	}
	return;
}
void kmp() {
	getNext();
	int j = 0;
	for (int i = 0;i < s.size();i ++) {
		while (j && s[i] != p[j])
			j = Next[j];
		if (s[i] == p[j]) ++ j;
		Back[i] = j;
		st.push_front(i);
		if (j == p.size()) {
			for (int k = 1;k <= p.size();k ++)
				st.pop_front();
			j = Back[st.front()];
		}
	}
	return;
}
int main() {
	cin >> s >> p;
	kmp();
	while (!st.empty()) {
		printf("%c",s[st.back()]);
		st.pop_back();
	}
	printf("\n");
	return 0;
}

2024/11/8 22:27
加载中...