这是我用来统计答案的部分。
可以 AC:
void calc (char* s) {
int idx = 0; vis[0] = 1;
for (int i = 1;i <= strlen(s+1);i++) {
idx = ch[idx][op[s[i]]];
int j = idx;
while (!vis[j]) vis[j] = 1, j = fail[j];
}
}
TLE:
void calc (char* s) {
int idx = 0; vis[0] = 1;
for (int i = 1;i <= strlen(s+1);i++) {
idx = ch[idx][op[s[i]]]; vis[idx] = 1;
int j = idx;
while (!vis[fail[j]]) vis[fail[j]] = 1, j = fail[j];
}
}
两份代码仅有跳 fail 时的操作不同,有没有大佬解释一下?