想试一下KMP,结果WA5,错哪了???
查看原帖
想试一下KMP,结果WA5,错哪了???
919593
l202205080152楼主2023/10/20 17:16
#include<bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10;

int nxt[N];

void get_next(string s) {
	int len = s.size();
	int i = 1, k = 0;
	nxt[1] = 0;
	while(i < len) {
		if(k == 0 || s[i] == s[k]) {
			i ++, k ++;
			if(s[i] != s[k]) nxt[i] = k;
			else nxt[i] = nxt[k];
		} else {
			k = nxt[k];
		}
	}
}

bool indexKMP(string s, string t) {
	int i = 1, j = 1;
	get_next(t);

	int len1 = s.size(), len2 = t.size();
	while(i < len1 && j < len2) {
		if(j == 0 || s[i] == t[j])  i ++, j ++;
		else j = nxt[j];
	}
	if(j >= len2) return true;
	else return false;
}

int main() {

	string s0, s1; cin >> s0 >> s1;
	int len0 = s0.size(), len1 = s1.size();

	if(len1 >= len0 && indexKMP(s1, s0)) {
		cout << s0 << " is substring of " << s1 << endl;
	} else if(len1 <= len0 && indexKMP(s0, s1)) {
		cout << s1 << " is substring of " << s0 << endl;
	} else {
		cout << "No substring" << endl;
	}

	return 0;
}



2023/10/20 17:16
加载中...