1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public: int map(char s) { if (s == 'Q') return 0; if (s == 'W') return 1; if (s == 'E') return 2; return 3; }
int balancedString(string s) { int total[4] = {0}, sum[4] = {0}; int res = s.size(), size = s.size(), n = s.size() / 4; for (auto &it: s) total[map(it)] += 1; if (total[0] == n && total[1] == n && total[2] == n && total[3] == n) return 0; for (int i = 0, j = 0; i < size; ++i) { sum[map(s[i])] += 1; if (total[0] - sum[0] <= n && total[1] - sum[1] <= n && total[2] - sum[2] <= n && total[3] - sum[3] <= n) { while (j <= i && total[map(s[j])] - sum[map(s[j])] + 1 <= n) sum[map(s[j++])] -= 1; res = min(res, i - j + 1); } } return res; } };
|