This commit is contained in:
1 parent
68db99a45c
commit
6648c1c279
2 files changed
+92
No files matched your search
@@ -0,0 +1,34 @@
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
char s1[1000006], s2[1000006];
|
||||
int n1, n2;
|
||||
int nxt[1000006];
|
||||
void gnext() {
|
||||
for(int i = 2; i <= n2; ++i) {
|
||||
int j = nxt[i - 1];
|
||||
while(j > 0 && s2[j + 1] != s2[i]) j = nxt[j];
|
||||
if(s2[j + 1] == s2[i]) j++;
|
||||
nxt[i] = j;
|
||||
}
|
||||
}
|
||||
void f() {
|
||||
int j = 0;
|
||||
for(int i = 1; i <= n1; ++i) {
|
||||
while(j > 0 && s2[j + 1] != s1[i]) j = nxt[j];
|
||||
if(s2[j + 1] == s1[i]) j++;
|
||||
if(j == n2) {
|
||||
printf("%d\n", i - n2 + 1);
|
||||
j = nxt[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
int main() {
|
||||
scanf("%s%s", s1 + 1, s2 + 1);
|
||||
n1 = strlen(s1 + 1), n2 = strlen(s2 + 1);
|
||||
gnext();
|
||||
f();
|
||||
for(int i = 1; i <= n2; ++i) {
|
||||
printf("%d ", nxt[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user