力扣1234.替换子串得到平衡字符串

力扣1234.替换子串得到平衡字符串

  • 由题意可知 超过n/4的字母是一定要替换的

    • 所以只要找到一段包含超过n/4个字母的最小区间即可
    • 转换为去除这个最小区间后 4种字母的出现频率都<=n/4
cpp 复制代码
  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;
      }
  };
相关推荐
没钥匙的锁16 小时前
05-Java面向对象构造器与封装
java·开发语言
Yang_jie_037 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
aaPIXa6227 小时前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
蓝银草同学7 小时前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
2301_800895107 小时前
信息安全数学基础复习
算法
爱折腾的小黑牛7 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
Starmoon_dhw7 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
某不知名網友7 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
海石8 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
Tisfy8 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量