力扣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;
      }
  };
相关推荐
这可就有点麻烦了9 分钟前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
救救孩子把9 分钟前
深入理解 Java 对象的内存布局
java
落落落sss12 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
苏宸啊14 分钟前
顺序表及其代码实现
数据结构·算法
万物皆字节17 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
lin zaixi()18 分钟前
贪心思想之——最大子段和问题
数据结构·算法
FindYou.18 分钟前
C - Separated Lunch
算法·深度优先
夜雨翦春韭24 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
我行我素,向往自由30 分钟前
速成java记录(上)
java·速成
Kent_J_Truman35 分钟前
【平方差 / C】
算法