当前位置: 首页 > news >正文

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

在这里插入图片描述
在这里插入图片描述
这一题的大意是说给出一个只含有特定字符的字符串,现在要求我们找到各个字符都处于平衡的状态,即每一个字符出现的次数都是k,
我们可以选择通过用一个替换一个子字符串来改变各个字符出现的次数,使它们处于平衡状态。我们希望这个子字串尽可能的小。
现在让我们找到通过替换子串使得字符串平衡的最小的子串的长度。
那么我们就要想,什么样的子字符串可以被替代,什么情况下,该子字符串可以被替换,使得各个字符处于平衡状态。
当在子字符串以外各个字符出现的次数是小于等于k的时候,该子字符串是符合条件的,可以用来更新ans。
为啥这种情况下,是符合条件的呢?
因为子字符串会将缺少的不足的字符补齐,而如果在子字符串之外有超过的,那么完整的字符串是一定不平衡的,因为字符总数是固定的,一种字符超出k,那么必定会有另一种字符不足,因此我们可以采用滑动窗口的方式寻找子字符串,在滑动的过程中保证所有字符是小于等于k即可。如果超出k就应该扩大窗口,使得字符的数量减少。为了使得子字符串尽可能的小,我们会移动l,使得各个字符的数量变大,在滑动的过程中找到最小的子串。
完整代码如下:

class Solution {
public:int balancedString(string s) {int n=s.size();int per=n/4;unordered_map<char,int> mp;for(int i=0;i<s.size();i++){mp[s[i]]++;}if(mp['W']==per&&mp['Q']==per&&mp['E']==per&&mp['R']==per){return  0;}int l=0;int r=0;int ans=INT_MAX;while(r<n){mp[s[r]]--;while(mp['W']<=per&&mp['Q']<=per&&mp['E']<=per&&mp['R']<=per){ans=min(ans,r-l+1);mp[s[l]]++;l++;}r++;}return ans;}
};

时间复杂度O(n)

http://www.dtcms.com/a/464858.html

相关文章:

  • 数据链路层协议之STP协议
  • 给Windows电脑重命名有啥好处?
  • 网站后期的维护管理淘宝无货源一键铺货软件
  • 网站开发工程师是干嘛的网站开发职位
  • Java 创建 Word 文档:实现高效文档生成
  • C#限制当前单元格的值为指定值时禁止编辑的方法
  • 【gdb/sqlite3移植/mqtt】
  • 2025年渗透测试面试题总结-106(题目+回答)
  • 使用verdaccio搭建轻量的npm私有仓库
  • react + ant 封装Crud-根据配置生成对应的页面
  • 10-支持向量机(SVM):讲解基于最大间隔原则的分类算法
  • 微算法科技(NASDAQ:MLGO)开发延迟和隐私感知卷积神经网络分布式推理,助力可靠人工智能系统技术
  • 【Qt开发】输入类控件(六)-> QDial
  • 在JavaScript / HTML中,Chrome报错此服务器无法证实它就是xxxxx - 它的安全证书没有指定主题备用名称
  • 如何建一个免费的网站流量对网站排名的影响因素
  • PawSQL宣布支持DB2数据库SQL审核和性能优化
  • 在JavaScript / HTML中,div容器在内容过多时不显示超出的部分
  • webrtc弱网-RobustThroughputEstimator源码分析与算法原理
  • WPF依赖属性
  • 数据可视化 ECharts
  • javascript 性能优化实例一则
  • mapbox基础,使用矢量切片服务(pbf)加载line线图层
  • LLVM(Low Level Virtual Machine)介绍
  • Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析
  • HDLBit 个人记录
  • 基于Jetson+FPGA+GMSL+AI的自动驾驶数据采集解决方案
  • 0006.C#学习笔记3-- HTML和CSS
  • 基于X86+FPGA+GPU的自动驾驶数据回灌测试解决方案
  • 在JavaScript / HTML中,Chrome报错Refused to execute inline script
  • 自动驾驶的“虚拟驾校”如何炼成?