Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- int KMP(string s, string p) {
- int ans = -1;
- int n = s.size();
- int m = p.size();
- int *d = new int[m];
- d[0] = 0;
- int j = 0;
- int i = 1;
- while (i < m) {
- while (j > 0 && p[j] != p[i])
- j = d[j - 1];
- if (p[j] == p[i])
- j++;
- d[i] = j;
- i++;
- }
- j = 0;
- i = 0;
- while (i < n) {
- while (j > 0 && p[j] != s[i])
- j = d[j - 1];
- if (p[j] == s[i])
- j++;
- if (j == m) {
- ans = i - j + 1;
- break;
- }
- i ++;
- }
- delete [] d;
- return ans;
- }
- int main() {
- string s, p;
- cin >> s >> p;
- cout << KMP(s, p) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement