fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int solve_for(char king, const string &s) {
  5. int n = s.size();
  6. vector<int> pref(n + 1, 0);
  7.  
  8. for (int i = 1; i <= n; i++) {
  9. if (s[i - 1] == king) pref[i] = pref[i - 1] + 1;
  10. else pref[i] = pref[i - 1] - 1;
  11. }
  12.  
  13. vector<int> minPref(n + 1), pos(n + 1);
  14. minPref[0] = pref[0];
  15. pos[0] = 0;
  16.  
  17. for (int i = 1; i <= n; i++) {
  18. if (pref[i] < minPref[i - 1]) {
  19. minPref[i] = pref[i];
  20. pos[i] = i;
  21. } else {
  22. minPref[i] = minPref[i - 1];
  23. pos[i] = pos[i - 1];
  24. }
  25. }
  26.  
  27. int ans = 0;
  28. for (int r = 1; r <= n; r++) {
  29. int l = lower_bound(minPref.begin(), minPref.end(), pref[r])
  30. - minPref.begin();
  31. if (l > 0) {
  32. ans = max(ans, r - pos[l - 1]);
  33. }
  34. }
  35. return ans;
  36. }
  37.  
  38. int main() {
  39. ios::sync_with_stdio(false);
  40. cin.tie(nullptr);
  41.  
  42. int n;
  43. cin >> n;
  44. string s;
  45. cin >> s;
  46.  
  47. int ans = 0;
  48. ans = max(ans, solve_for('a', s));
  49. ans = max(ans, solve_for('b', s));
  50. ans = max(ans, solve_for('c', s));
  51.  
  52. cout << ans << '\n';
  53. }
  54.  
Success #stdin #stdout 0s 5324KB
stdin
6
abcacc
stdout
4