Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace::std;
  4. int* prefix(string str);
  5. int firstent(string str, string pattern);
  6. int main()
  7. {
  8. string T, P;
  9. getline(cin, T);
  10. getline(cin, P);
  11. cout << firstent(T, P);
  12. }
  13. int* prefix(string s)
  14. {
  15. int*p = new int[s.length()];
  16. int k = 0;
  17. p[0] = 0;
  18. for (int i = 1; i < s.length(); i++)
  19. {
  20. while (k > 0 && s[k] != s[i])
  21. {
  22. k = p[k - 1];
  23. }
  24. if (s[k] == s[i])
  25. {
  26. k++;
  27. }
  28. p[i] = k;
  29. }
  30. return p;
  31. }
  32. int firstent(string str, string P) {
  33. int m = P.length();
  34. if (m == 0)
  35. {
  36. return 0;
  37. }
  38. int* p = prefix(P);
  39. for (int i = 0, k = 0; i < str.length(); i++)
  40. while (true)
  41. {
  42. if (P[k] == str[i])
  43. {
  44. k++;
  45. if (k == m)
  46. {
  47. return i + 1 - m;
  48. }
  49. break;
  50. }
  51. if (k == 0)
  52. {
  53. break;
  54. }
  55. k = p[k - 1];
  56. }
  57. return -1;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement