警示后人
查看原帖
警示后人
1401095
zhangchengqi666楼主2025/7/19 13:15

自己看看这两份代码哪里不一样。

while (!q.empty()) {
	int u = q.front();
	q.pop();
	for (int i = 0; i < 2; i++) {
		int v = son[u][i];
		if (v) {
			q.push(v);
			int p = fail[u];
			while (p && !son[p][i]) {
				p = fail[p];
			}
			if (son[p][i]) {
				fail[v] = son[p][i];
				d[v] |= d[son[p][i]];
			} else {
				fail[v] = 0;
			}
		} else {
			son[u][i] = son[fail[u]][i];
		}
	}
}
while (!q.empty()) {
	int u = q.front();
	q.pop();
	for (int i = 0; i < 2; i++) {
		int v = son[u][i];
		if (v) {
			q.push(v);
			int p = fail[u];
			while (p && !son[p][i]) {
				p = fail[p];
			}
			if (p) {
				fail[v] = son[p][i];
				d[v] |= d[son[p][i]];
			} else {
				fail[v] = 0;
			}
		} else {
			son[u][i] = son[fail[u]][i];
		}
	}
}
2025/7/19 13:15
加载中...