2
2
3
3
vector<int > prefix_function (string &s)
4
4
{
5
- int n = ( int )s. length ();
5
+ int n = s. size ();
6
6
vector<int > pi (n);
7
- for (int i = 1 ; i < n; i++)
7
+ for (int i = 1 ; i < n; i++)
8
8
{
9
- int j = pi [i- 1 ];
10
- while (j > 0 && s[i] != s[j])
11
- j = pi [j- 1 ];
9
+ int j = pi [i - 1 ];
10
+ while (j > 0 && s[i] != s[j])
11
+ j = pi [j - 1 ];
12
12
if (s[i] == s[j])
13
13
j++;
14
14
pi [i] = j;
@@ -18,14 +18,14 @@ vector<int> prefix_function(string &s)
18
18
19
19
vector<int > find_occurences (string &text, string &pattern)
20
20
{
21
- string cur= pattern + ' #' + text;
22
- int sz1= text.size (), sz2= pattern.size ();
21
+ string cur = pattern + ' #' + text;
22
+ int sz1 = text.size (), sz2 = pattern.size ();
23
23
vector<int > v;
24
- vector<int > lps= prefix_function (cur);
25
- for (int i= sz2+ 1 ;i<= sz1+ sz2;i++)
24
+ vector<int > lps = prefix_function (cur);
25
+ for (int i = sz2 + 1 ; i <= sz1 + sz2; i++)
26
26
{
27
- if (lps[i]== sz2)
28
- v.push_back (i- 2 * sz2);
27
+ if (lps[i] == sz2)
28
+ v.push_back (i - 2 * sz2);
29
29
}
30
30
return v;
31
31
}
@@ -34,14 +34,14 @@ vector<int> find_occurences(string &text, string &pattern)
34
34
35
35
vector<int > prefix_function (vector<int > &v)
36
36
{
37
- int n = ( int ) v.size ();
37
+ int n = v.size ();
38
38
vector<int > pi (n);
39
- for (int i = 1 ; i < n; i++)
39
+ for (int i = 1 ; i < n; i++)
40
40
{
41
- int j = pi [i- 1 ];
42
- while (j > 0 && v[i] != v[j])
43
- j = pi [j- 1 ];
44
- if (v[i] == v[j])
41
+ int j = pi [i - 1 ];
42
+ while (j > 0 && v[i] != v[j])
43
+ j = pi [j - 1 ];
44
+ if (v[i] == v[j])
45
45
j++;
46
46
pi [i] = j;
47
47
}
@@ -50,26 +50,27 @@ vector<int> prefix_function(vector<int> &v)
50
50
51
51
vector<int > find_occurences (vector<int > &text, vector<int > &pattern)
52
52
{
53
- vector<int > v= pattern;
53
+ vector<int > v = pattern;
54
54
v.push_back (-1 );
55
55
for (auto &it:text)
56
56
v.push_back (it);
57
- int sz1= text.size (), sz2= pattern.size ();
58
- vector<int > lps= prefix_function (v);
57
+ int sz1 = text.size (), sz2 = pattern.size ();
58
+ vector<int > lps = prefix_function (v);
59
59
vector<int > store;
60
- for (int i= sz2+ 1 ;i<= sz1+ sz2;i++)
60
+ for (int i = sz2 + 1 ; i <= sz1 + sz2; i++)
61
61
{
62
- if (lps[i]== sz2)
63
- store.push_back (i-sz* 2 );
62
+ if (lps[i] == sz2)
63
+ store.push_back (i - 2 * sz2 );
64
64
}
65
65
return v;
66
66
}
67
67
68
-
69
68
// Problem 1 (Basic KMP): https://codeforces.com/contest/1016/problem/B
70
69
// Solution 1: https://codeforces.com/contest/1016/submission/41167402
71
70
72
71
// Problem 2 and Solution (Cyclic Matching - Vectors): http://codeforces.com/gym/100502/submission/41562571
73
72
74
73
// Problem 3 (Ranking Pattern): https://qr.ae/TUG5h9
75
74
// Solution 3: http://p.ip.fi/Hwpy
75
+
76
+ // Problem 4: (Period of String) https://www.spoj.com/problems/FINDSR/
0 commit comments