力扣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;
      }
  };
相关推荐
IT探索2 小时前
Linux 查找文件指令总结
linux·算法
曹牧2 小时前
文档格式:OFD
java
豆角焖肉3 小时前
Maven进阶与搭建私服
java·maven
Lumos1863 小时前
51单片机从零到实战(完结)——后续学习路线建议
算法
稚南城才子,乌衣巷风流3 小时前
DFS序详解:原理、应用与实现
算法·深度优先·图论
稚南城才子,乌衣巷风流3 小时前
动态树(Dynamic Tree)数据结构详解
数据结构·算法
大不点wow3 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
噢,我明白了3 小时前
Java中日期和字符串的处理
java·开发语言·日期
dkbnull3 小时前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai3 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器