bhupixb

Longest Prefix which is also suffix

Jul 23rd, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1.  
  2. const int N = 5e5 + 5;
  3. const int mod = (1LL<<31) - 1;
  4. const int p = 123;
  5. int pre[N], var[N];
  6.  
  7.  
  8. inline int add(int x, int y) {
  9. return (x + y) % mod;
  10. }
  11.  
  12. inline int mul(int x, int y) {
  13. return ((x % mod) * (y % mod)) % mod;
  14. }
  15.  
  16. int po(int x, int n) {
  17. int res = 1;
  18. for (;n;) {
  19. if (n & 1) {
  20. res = mul(res, x);
  21. }
  22. x = mul(x, x);
  23. n /= 2;
  24. }
  25. return res;
  26. }
  27.  
  28. // Longest Prefix which is also suffix of length atmost n - 1
  29. int LPS(const string &s) {
  30. int n = s.size(), ans(0);
  31. if (n < 2) {
  32. return 0;
  33. }
  34. var[0] = 1;
  35. for (int i = 1; i <= n; ++i) {
  36. var[i] = mul(var[i-1], p);
  37. pre[i] = add(pre[i-1],mul(s[i-1], var[i]));
  38. }
  39. rep(i,1,n-1) {
  40. int x = pre[i];
  41. int y = add(pre[n] - pre[n-i], mod);
  42. y = mul(y, po(var[n-i], mod - 2));
  43. if (x == y) {
  44. ans = i;
  45. }
  46. }
  47. return ans;
  48. }
Add Comment
Please, Sign In to add comment