力扣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;
      }
  };
相关推荐
XS0301061 分钟前
JavaEE 核心知识
java·java-ee
JieE2124 分钟前
LeetCode 138 随机链表的复制|两种解法详解(哈希表 + 原地 O (1) 空间)
javascript·算法·面试
专注于ai算法的踩坑小达人17 分钟前
时序预测主流模型综述
算法·lstm
weixin_4467291617 分钟前
java实现发送邮件
java·开发语言
QCoding28 分钟前
Java转AI第三课:Spring AI如何把100行HTTP代码缩减到10行?
java·人工智能
振宇i30 分钟前
Java集成openfeign远程RPC调用教程
java·rpc·openfeign
wear工程师31 分钟前
volatile 这题别只答「可见性」:面试官真正想听的是这条 happens-before
java·jvm
摇滚侠33 分钟前
Java 全栈开发实战教程 01 课程简介
java
王九思35 分钟前
对称加密与非对称加密详解
java·网络·数据库
SimonKing1 小时前
Spring Boot 4.0 + gRPC 极简集成:4步搞定,比REST还丝滑
java·后端·程序员