File tree 1 file changed +19
-2
lines changed
1 file changed +19
-2
lines changed Original file line number Diff line number Diff line change @@ -32,8 +32,8 @@ struct SA {
32
32
void buildLCP () {
33
33
lcp = vector<int >(n);
34
34
for (int i=0 ,k=0 ;i<n;i++) {
35
- if (ra[i] != n- 1 ) {
36
- for (int j=sa[ra[i]+ 1 ]; s[i+k] == s[j+k];) k++;
35
+ if (ra[i]) {
36
+ for (int j=sa[ra[i]- 1 ]; s[i+k] == s[j+k];) k++;
37
37
lcp[ra[i]] = k;
38
38
k = max (k-1 , 0 );
39
39
}
@@ -51,3 +51,20 @@ struct SA {
51
51
}
52
52
bool findString (const string& t) {return findString (t, 0 , t.size ()-1 );}
53
53
};
54
+
55
+ int main () {
56
+ string s;
57
+ cin >> s;
58
+ SA sa (s);
59
+ int n = s.size ();
60
+ // lexicographical order looping, O(N^2)
61
+ for (int i=1 ;i<=n;i++) {
62
+ for (int j=sa.lcp [i]+1 ;j+sa.sa [i]<=n;j++) {
63
+ for (int k=i;k<=n;k++) {
64
+ if (k>i && sa.lcp [k]<j) break ;
65
+ int st = sa.sa [k], en = sa.sa [k]+j-1 ;
66
+ cout << s.substr (st, j) << endl;
67
+ }
68
+ }
69
+ }
70
+ }
You can’t perform that action at this time.
0 commit comments