力扣1234.替换子串得到平衡字符串
-
由题意可知 超过n/4的字母是一定要替换的
- 所以只要找到一段包含超过n/4个字母的最小区间即可
- 转换为去除这个最小区间后 4种字母的出现频率都<=n/4
-
class Solution { public: int balancedString(string s) { unordered_map<char,int> cnt; int n = s.size(),m = n/4,res=n; for(int i=0;i<s.size();i++) cnt[s[i]] ++; //如果已经满足要求 直接return if (cnt['Q'] == m && cnt['W'] == m && cnt['E'] == m && cnt['R'] == m) return 0; //枚举右端点 for(int i=0,j=0;i<n;i++) { //放入区间 同时删去 cnt[s[i]] --; //满足要求 while (cnt['Q'] <= m && cnt['W'] <= m && cnt['E'] <= m && cnt['R'] <= m) { res = min(res,i-j+1); //左端点加回来 cnt[s[j++]]++; } } return res; } };