题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,给一个由 QWER 四个字母组成的字符串,可以变换其中的子字符串,使得四个字母数量相同,求变换的子字符串的最短长度。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考解法
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
27
28
29
30
class Solution {
public:
int balancedString(string s) {
int n = s.size();
int rec['X']{};
for (const char &c:s) {
rec[c]++;
}
int base = n/4;


// rec的意思变为窗口内多余的字母
if (rec['Q']==base && rec['W']==base && rec['E']==base && rec['R']==base) return 0;
int ans = INT_MAX;

int left = 0;
for (int right=0; right < n; right++) {
rec[s[right]]--;

while(rec['Q']<=base && rec['W']<=base && rec['E']<=base && rec['R']<=base) {
ans = min(ans, right-left+1);
// cout << left << " " << right << " " << rec['Q'] << rec['W'] << rec['E']<<rec['R'] << endl;
rec[s[left++]]++;
}
//cout << left << " " << right << " " << rec['Q'] << rec['W'] << rec['E']<<rec['R'] << endl;

}
return ans;
}
};