Advertisement
MinhNGUYEN2k4

PALINY

May 26th, 2021
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.85 KB | None | 0 0
  1. void proc()
  2. {
  3.     vector<int> d1(n);
  4.     for (int i = 0, l = 0, r = -1; i < n; i++) {
  5.         int k = (i > r) ? 1 : min(d1[l + r - i], r - i + 1);
  6.         while (0 <= i - k && i + k < n && s[i - k] == s[i + k]) {
  7.             k++;
  8.         }
  9.         d1[i] = k--;
  10.         if (i + k > r) {
  11.             l = i - k;
  12.             r = i + k;
  13.         }
  14.     }
  15.     vector<int> d2(n);
  16.     for (int i = 0, l = 0, r = -1; i < n; i++) {
  17.         int k = (i > r) ? 0 : min(d2[l + r - i + 1], r - i + 1);
  18.         while (0 <= i - k - 1 && i + k < n && s[i - k - 1] == s[i + k]) {
  19.             k++;
  20.         }
  21.         d2[i] = k--;
  22.         if (i + k > r) {
  23.             l = i - k - 1;
  24.             r = i + k ;
  25.         }
  26.     }
  27.     int res=0;
  28.     for(int i=0; i<n; i++){
  29.         res = max(d1[i]*2-1,res);
  30.         res = max(d2[i]*2,res);
  31.     }
  32.     cout << res << endl;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement