Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace::std;
- int* prefix(string str);
- int firstent(string str, string pattern);
- int main()
- {
- string T, P;
- getline(cin, T);
- getline(cin, P);
- cout << firstent(T, P);
- }
- int* prefix(string s)
- {
- int*p = new int[s.length()];
- int k = 0;
- p[0] = 0;
- for (int i = 1; i < s.length(); i++)
- {
- while (k > 0 && s[k] != s[i])
- {
- k = p[k - 1];
- }
- if (s[k] == s[i])
- {
- k++;
- }
- p[i] = k;
- }
- return p;
- }
- int firstent(string str, string P) {
- int m = P.length();
- if (m == 0)
- {
- return 0;
- }
- int* p = prefix(P);
- for (int i = 0, k = 0; i < str.length(); i++)
- while (true)
- {
- if (P[k] == str[i])
- {
- k++;
- if (k == m)
- {
- return i + 1 - m;
- }
- break;
- }
- if (k == 0)
- {
- break;
- }
- k = p[k - 1];
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement