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

【1234. 替换子串得到平衡字符串】

来源:力扣(LeetCode)

描述:

有一个只含有 'Q', 'W', 'E', 'R' 四种字符,且长度为 n 的字符串。

假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。

给你一个这样的字符串 s,请通过「替换一个子串」的方式,使原字符串 s 变成一个「平衡字符串」。

你可以用和「待替换子串」长度相同的 任何 其他字符串来完成替换。

请返回待替换子串的最小可能长度。

如果原字符串自身就是一个平衡字符串,则返回 0

示例 1:

输入:s = "QWER"
输出:0
解释:s 已经是平衡的了。

示例 2:

输入:s = "QQWE"
输出:1
解释:我们需要把一个 'Q' 替换成 'R',这样得到的 "RQWE" ("QRWE") 是平衡的。

示例 3:

输入:s = "QQQW"
输出:2
解释:我们可以把前面的 "QQ" 替换成 "ER"

示例 4:

输入:s = "QQQQ"
输出:3
解释:我们可以替换后 3'Q',使 s = "QWER"

提示:

  • 1 <= s.length <= 105
  • s.length 是 4 的倍数
  • s 中只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符

方法:滑动窗口

思路与算法

设 partial = n / 4 ,我们选择 s 的一个子串作为「待替换子串」,只有当 s 剩余的部分中 ‘Q’,‘W’,‘E’,‘R’ 的出现次数都小于等于 partial 时,我们才有可能使 s 变为「平衡字符串」。

如果原始的 s 就是 「平衡字符串」,我们直接返回 0,否则我们按照以下思路求解。

从小到大枚举「待替换子串」的左端点 l,为了使得替换的长度最小,我们要找到最近的右端点 r,使得去除 [l, r) 之后的剩余部分满足上述条件。不难发现,随着 l 的递增,r 也是递增的。

具体的,我们使用滑动窗口来维护区间 [l, r) 之外的剩余部分中 ‘Q’,‘W’,‘E’,‘R’ 的出现次数,当其中一种字符的出现次数大于 partial 时,令 s[r] 的出现次数减 1,并使得 r 向右移动一个单位。该操作一直被执行,直到条件被满足或者 r 到达 s 的末尾。

如果找到了使得条件被满足的 r,我们用 r − l 来更新答案,然后令 s[l] 的出现次数加 1,并使得 l 向右移动一个单位进行下一次枚举。否则,后序的 l 也将不会有合法的 r,此时我们可以直接跳出循环。对于所有合法的 [l, r),取 r − l 的最小值做为答案。

代码:

class Solution {
public:int idx(const char& c) {return c - 'A';}int balancedString(string s) {vector<int> cnt(26);for (auto c : s) {cnt[idx(c)]++;}int partial = s.size() / 4;int res = s.size();auto check = [&]() {if (cnt[idx('Q')] > partial || cnt[idx('W')] > partial \|| cnt[idx('E')] > partial || cnt[idx('R')] > partial) {return false;}return true;};if (check()) {return 0;}for (int l = 0, r = 0; l < s.size(); l++) {while (r < s.size() && !check()) {cnt[idx(s[r])]--;r++;}if (!check()) {break;}res = min(res, r - l);cnt[idx(s[l])]++;}return res;}
};

执行用时:20 ms, 在所有 C++ 提交中击败了67.46%的用户
内存消耗:7.6 MB, 在所有 C++ 提交中击败了83.33%的用户
复杂度分析
时间复杂度:O(n),其中 n 为 s 的长度。
空间复杂度:O(∣Σ∣),其中 ∣Σ∣ 表示字符集大小,在本题中 ∣Σ∣ = 26。
author:LeetCode-Solution

相关文章:

【1234. 替换子串得到平衡字符串】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 有一个只含有 Q, W, E, R 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符…...

独自开:提供创业机会、享受平台分红、推出新颖赚钱副业

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 前言 独自开&#xff1a;一款聚焦软件定制开发&#xff0c;独立、自主、开放平台 独创分层标准化平台架构,满足系统不断生长的个性化需求多端一键部署前端业务交互与展…...

C++【二叉树进阶(二叉搜索树)】

文章目录前言1、二叉搜索树1-1、 二叉搜索树概念2、二叉搜索树操作2-1、树和节点的基本框架2-2、二叉搜索树的查找2-3、中序遍历2-4、二叉搜索树的插入2-5、二叉搜索树的删除3、二叉搜索树的模拟实现3-1、循环版本3-2、递归版本4、二叉搜索树的应用4-1、K模型4-2、KV模型4-3、K…...

【C++初阶】vector的使用

大家好我是沐曦希&#x1f495; 文章目录一.vector介绍二、构造函数三、遍历1.[]2.迭代器3.范围for四、容量操作1.扩容机制五、增删查改六、迭代器失效问题一.vector介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。…...

OPenPCDet windows流程及其问题

首先的首先极其不推荐将OPenPCDet运行在Windows上,过程非常复杂,适配也不是很好,不推荐在windows下载并训练,本人做这个主要是方便再笔记本电脑上对实验结果进行整理,处理一些简单的推理评估等任务。如有必要请继续阅读: 以下是正文: 常规的安装流程不再赘述,请参考官方…...

【自学Python】Python字符大小写判断

大纲 Python字符串是否是小写 Python字符串是否是小写教程 在开发过程中&#xff0c;有时候我们需要判断一个 字符串 是否是小写形式&#xff08;即&#xff0c;所有的字符都是小写字母&#xff0c;不是英文字符的忽略不做判断&#xff09;&#xff0c;在 Python 中&#xff…...

设计模式之美总结(开源实战篇)

title: 设计模式之美总结&#xff08;开源实战篇&#xff09; date: 2023-01-10 17:13:05 tags: 设计模式 categories:设计模式 cover: https://cover.png feature: false 文章目录1. Java JDK 应用到的设计模式1.1 工厂模式在 Calendar 类中的应用1.2 建造者模式在 Calendar …...

两个月,测试转岗产品经理,我是怎么规划的?

​本期同学依旧来自深圳 测试到产品转变&#xff0c;用了两个月 本周&#xff0c;为大家介绍M同学的佛系转岗经历 学员档 学员档案 原岗位&#xff1a;测试 转岗级别&#xff1a;中级产品经理 转岗特点&#xff1a; 1.未接触产品工作 2.对岗位地点要求严格 先看结果 …...

三数之和-力扣15-java排序+双指针

一、题目描述给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意&#xff1a;答案中不可以包含重复的三元组。…...

【编程基础之Python】3、创建Python虚拟环境

【编程基础之Python】3、创建Python虚拟环境创建Python虚拟环境为什么需要虚拟环境Windows上的Anaconda创建虚拟环境conda 命令conda env 命令创建虚拟环境切换虚拟环境验证虚拟环境Linux上的Anaconda创建虚拟环境创建虚拟环境切换虚拟环境验证虚拟环境总结创建Python虚拟环境 …...

kettle开发-Day36-循环驱动作业

前言&#xff1a;在日常数据处理时&#xff0c;我们通过变量传参来完成某个日期的数据转换。但可能因程序或者网络原因导致某个时间段的数据抽取失败。常见导致kettle作业失败的原因大概分为三大类&#xff0c;数据源异常、数据库异常、程序异常。因此面对这些异常时&#xff0…...

2023秋招 新凯来 算法工程师 面经分享

本专栏分享 计算机小伙伴秋招春招找工作的面试经验和面试的详情知识点 专栏首页:秋招算法类面经分享 主要分享计算机算法类在面试互联网公司时候一些真实的经验 一面 技术面 30分钟左右 1.主要是问项目和论文上的东西,问的不深,中间还介绍他们是做缺陷检测的,大概问了16分钟…...

Web3CN|Damus刷频背后,大众在期待什么样的去中心化社交?

刚过去的一周&#xff0c;许多人的朋友圈包括Twitter、Faceboo在内都在被一串公钥字母刷屏&#xff0c;其重要起因就是 Twitter 前首席执行官 Jack Dorsey 发推称&#xff0c;&#xff08;2月1日&#xff09;基于去中心化社交协议 Nostr 的社交产品 Damus 和 Amethyst 已分别在…...

Jenkins自动发布到WindowsServer,在WindowsServer执行的命令

echo off set apppoolname"6.usegitee" set websitename"6.usegitee" set webfolder"usegitee" echo 停止站点的应用程序池 C:\Windows\System32\inetsrv\appcmd.exe stop apppool %apppoolname% echo 停止站点 c:\Windows\System32\inetsrv\a…...

【Git学习】Git如何Clone带有Submodule的仓库?

文章目录一、问题描述二、解决问题三、参考链接四、解决问题4.1 下载主模块4.2 查看主模块的配置4.2 子模块的添加4.3 查看子模块的配置4.4 查看子模块的检出状态4.5 检出submodule4.6 再次查看.git/config4.7 重新打开Android Studio运行代码一、问题描述 在GitHub上下载了一…...

C语言进阶——通讯录模拟实现

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;只有走在路上&#xff0c;才能摆脱局限&#xff0c;摆脱执着&#xff0c;让所有的选择&#xff0c;探寻&#xff0c;猜测&#xff0c;想象都生机勃勃。——余秋雨《文化苦旅》 目录 一、前言 二、正…...

【C#基础】C# 变量和常量的使用

序号系列文章1【C#基础】C# 程序通用结构总结2【C#基础】C# 程序基础语法解析3【C#基础】C# 数据类型总结文章目录前言一. 变量&#xff08;variable&#xff09;1&#xff0c;变量定义及初始化2&#xff0c;变量的类别3&#xff0c;接收输出变量二. 常量&#xff08;constant&…...

nvm安装后出现‘node‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

出现这个问题多半是path地址不对。 打开系统环境变量。看看path里面有没有&#xff1f;没有的话&#xff0c;加上就行&#xff01; 我的报错原因就是因为path里没有自动加上nvm的相关路径。 注意项&#xff1a; 1&#xff0c;在安装nvm之前&#xff0c;提前要把本机以前安装…...

张驰咨询:关于六西格玛,有一些常见的疑惑!

​ 很多想要学习六西格玛的学员&#xff0c;经常会有这些困惑&#xff1a; 以前没有接触过六西格玛&#xff0c;需要什么基础吗&#xff1f;自学还是培训&#xff1f;哪些行业会用到六西格玛呢&#xff1f;学习六西格玛对以后的工作有哪些帮助&#xff1f;如何选择六西格玛培…...

【Vercel】教你部署imsyy/home个人主页

本篇博客教你如何部署一个自己的个人主页 项目地址&#xff1a;https://github.com/imsyy/home 本文首发于 慕雪的寒舍 1.fork仓库vercel部署 首先我们点击fork&#xff0c;将仓库复刻到自己的账户 随后进入vercel&#xff0c;点击dashboard-add new-project 选择你复刻的仓库…...

网络安全信息搜集全流程

概念 方法论 工具链 合法授权实践 一、信息搜集的概念与重要性 信息搜集&#xff08;Information Gathering&#xff09;是网络安全渗透测试、漏洞挖掘&#xff08;SRC&#xff09;及红队评估中的奠基性阶段。其本质是通过主动与被动手法&#xff0c;最大化获取目标系统的…...

别再只盯着STA了!用SDF文件给你的芯片时序验证上个“双保险”(附VCS反标实操)

芯片时序验证的双重保障&#xff1a;SDF文件与STA的协同应用 在芯片设计领域&#xff0c;时序验证是确保电路功能正确性和性能达标的核心环节。许多工程师习惯于依赖静态时序分析&#xff08;STA&#xff09;作为唯一的验证手段&#xff0c;却忽视了动态时序仿真&#xff08;SD…...

windows下oracle 11g搭建主备

Oracle Data Guard 主备搭建 主库: 192.168.100.73 SIDorcl 备库: 192.168.100.74 SIDorcldg一、主库配置 (在73服务器执行) -- 1.1 开启归档模式 alter system set db_recovery_file_destC:\app\Administrator\flash_recovery_area scopeboth; alter system set db_recovery…...

OpenClaw技能扩展实战:用Qwen3.5-9B构建图片分析工作流

OpenClaw技能扩展实战&#xff1a;用Qwen3.5-9B构建图片分析工作流 1. 为什么需要图片分析工作流 作为一个经常需要处理大量图片的内容创作者&#xff0c;我长期被三个问题困扰&#xff1a;相册混乱难以查找、社交媒体配文耗时、截图信息整理低效。直到发现OpenClaw支持通过S…...

Wan2.2-I2V-A14B与MATLAB联合仿真:为科学可视化生成示意图

Wan2.2-I2V-A14B与MATLAB联合仿真&#xff1a;为科学可视化生成示意图 1. 科研可视化的新选择 在科研和工程领域&#xff0c;数据可视化一直是成果展示的关键环节。传统方法往往需要研究人员手动绘制示意图&#xff0c;既耗时又难以保证一致性。最近我们尝试了一种新方法&…...

HunyuanVideo-Foley部署教程:NVIDIA Container Toolkit集成最佳实践

HunyuanVideo-Foley部署教程&#xff1a;NVIDIA Container Toolkit集成最佳实践 1. 环境准备与快速部署 在开始部署HunyuanVideo-Foley之前&#xff0c;我们需要确保硬件和软件环境满足要求。本教程将指导您完成从零开始的完整部署流程。 1.1 硬件要求检查 显卡&#xff1a…...

PDF-Extract-Kit-1.0在Linux系统下的高效部署指南

PDF-Extract-Kit-1.0在Linux系统下的高效部署指南 1. 开篇&#xff1a;为什么选择PDF-Extract-Kit&#xff1f; 如果你经常需要从PDF文档中提取内容&#xff0c;肯定遇到过各种头疼的问题&#xff1a;格式错乱、表格识别不准、公式无法提取、排版复杂难以处理。PDF-Extract-K…...

天龙八部GM工具终极指南:5步掌握高效游戏管理技巧

天龙八部GM工具终极指南&#xff1a;5步掌握高效游戏管理技巧 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool TlbbGmTool是一款专为《天龙八部》单机版本设计的专业游戏管理工具&#xff0c;为游戏管…...

电商卖家工具:OpenClaw+Qwen3.5-9B-AWQ-4bit自动生成商品详情页

电商卖家工具&#xff1a;OpenClawQwen3.5-9B-AWQ-4bit自动生成商品详情页 1. 为什么需要自动化商品详情页生成 作为一名长期经营电商店铺的卖家&#xff0c;我深知制作商品详情页的痛苦。每次上新都需要经历&#xff1a;产品拍摄、图片处理、文案撰写、尺寸适配、多平台发布…...

GNU C扩展语法在嵌入式开发中的实战应用

1. GNU C扩展语法概述在嵌入式开发领域&#xff0c;GNU C编译器因其强大的扩展功能而广受欢迎。作为一名长期从事嵌入式开发的工程师&#xff0c;我发现这些扩展语法不仅能提高代码效率&#xff0c;还能解决许多标准C语言难以处理的场景问题。GNU C扩展主要包括以下几个重要特性…...