Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void proc()
- {
- vector<int> d1(n);
- for (int i = 0, l = 0, r = -1; i < n; i++) {
- int k = (i > r) ? 1 : min(d1[l + r - i], r - i + 1);
- while (0 <= i - k && i + k < n && s[i - k] == s[i + k]) {
- k++;
- }
- d1[i] = k--;
- if (i + k > r) {
- l = i - k;
- r = i + k;
- }
- }
- vector<int> d2(n);
- for (int i = 0, l = 0, r = -1; i < n; i++) {
- int k = (i > r) ? 0 : min(d2[l + r - i + 1], r - i + 1);
- while (0 <= i - k - 1 && i + k < n && s[i - k - 1] == s[i + k]) {
- k++;
- }
- d2[i] = k--;
- if (i + k > r) {
- l = i - k - 1;
- r = i + k ;
- }
- }
- int res=0;
- for(int i=0; i<n; i++){
- res = max(d1[i]*2-1,res);
- res = max(d2[i]*2,res);
- }
- cout << res << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement