LeetCode 1234 替换子串得到平衡字符串
🟡 中等 https://leetcode.cn/problems/replace-the-substring-for-balanced-string/description/
首先分析问题,从中间切一刀如果左边的各个值均小于等于 n/4,那么右边一定可以调整到平衡状态,反之不然。那右边一定必须到头码?不是的,右边可以提前结束,应该是除了选中的窗口内的字符,其他的字符计数都小于n/4就一定可以调整窗口内的字符得到平衡。
这里初始 count假设是大数,因此while始终维护小数,答案是小数的情况,因此在while里面更新。
class Solution {
public:
int balancedString(string s) {
int total_len = s.size();
int single_len = total_len / 4;
unordered_map<char, int> count;
for(int i = 0;i<total_len;i++){
count[s[i]]++;
}
if(count['Q']<=single_len&&count['W']<=single_len&&count['E']<=single_len&&count['R']<=single_len){
return 0;
}
int left = 0;
int res = total_len;
for(int i = 0;i<total_len;i++){
count[s[i]]--;
while(count['Q']<=single_len&&count['W']<=single_len&&count['E']<=single_len&&count['R']<=single_len){
res = min(res,i-left+1);
count[s[left]]++;
left++;
}
}
return res;
}
};