LeetCode 1234. 替换子串得到平衡字符串(滑动窗口)

1. 题目

有一个只含有 ‘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 <= 10^5
s.length 是 4 的倍数
s 中只含有 'Q', 'W', 'E', 'R' 四种字符

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/replace-the-substring-for-balanced-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 对所有的字符计数QWER
  • 窗口[i,j]内的字符数减去
  • 窗口外的计数满足要求,左端点右移,不满足,右端点右移
class Solution {	// c++
public:int balancedString(string s) {int n = s.size(), Q = 0, W = 0, E = 0, R = 0;int nt = n>>2;int i = 0, j, minlen = n;for(i = 0; i < n; ++i){	//获取计数if (s[i] == 'Q') Q++;else if (s[i] == 'W') W++;else if (s[i] == 'E') E++;else R++;}if(Q==nt && W==nt && E==nt && R==nt)return 0;//已平衡,满足for(i = 0, j = 0; j < n; ++j){if(Q > nt || W > nt || E > nt || R > nt){	//窗口外多了,进入窗口一个,窗口外少了,计数-1if (s[j] == 'Q') Q--;else if (s[j] == 'W') W--;else if (s[j] == 'E') E--;else R--;}while(i < n && (Q <= nt && W <= nt && E <= nt && R <= nt)){	//窗口外满足条件,我要尽可能的让窗口小,让左端点出去,窗口外计数+1minlen = min(minlen, j-i+1);if (s[i] == 'Q') Q++;else if (s[i] == 'W') W++;else if (s[i] == 'E') E++;else R++;i++;}}return minlen;}
};

16 ms 7.9 MB

class Solution: # py3def balancedString(self, s: str) -> int:n = len(s)Q = 0W = 0E = 0R = 0nt = n>>2for i in range(n):if s[i] == 'Q':Q += 1elif s[i] == 'W':W += 1elif s[i] == 'E':E += 1else:R += 1if Q==nt and W==nt and E==nt and R==nt:return 0;i = 0minlen = nfor j in range(n):if Q > nt or W > nt or E > nt or R > nt:# 窗口外多了,进入窗口一个,窗口外少了,计数-1if s[j] == 'Q':Q -= 1elif s[j] == 'W':W -= 1elif s[j] == 'E':E -= 1else:R -= 1while i < n and (Q <= nt and W <= nt and E <= nt and R <= nt):# 窗口外满足条件,我要尽可能的让窗口小,让左端点出去,窗口外计数+1minlen = min(minlen, j-i+1)if s[i] == 'Q':Q += 1;elif s[i] == 'W':W += 1elif s[i] == 'E':E += 1else:R += 1;i += 1;return minlen

216 ms 14.3 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net mvc 实现文件管理参考资料

1、http://www.cnblogs.com/chsword/archive/2009/03/17/aspnetmvcfilemanagement.html 2、http://www.0812ok.com/app/blog/info.aspx?bid221转载于:https://www.cnblogs.com/cuiwenke/archive/2011/05/30/2063264.html

Power BI 将商业智能数据转换为数据理解

l 研究数据 在本部分中你要了解各种知识&#xff0c;并且积极的互动和进行 Power BI 共享在这一部分至关重要。 Power BI 服务简介 Power BI 服务是 Power BI Desktop 的自然扩展&#xff0c;其功能包括上传报表、创建仪表板&#xff0c;以及使用自然语言对数据进行提问。该服…

LeetCode 554. 砖墙(map计数)

1. 题目 你的面前有一堵方形的、由多行砖块组成的砖墙。 这些砖块高度相同但是宽度不同。你现在要画一条自顶向下的、穿过最少砖块的垂线。 砖墙由行的列表表示。 每一行都是一个代表从左至右每块砖的宽度的整数列表。 如果你画的线只是从砖块的边缘经过&#xff0c;就不算穿…

Power BI 数据可视化(核心),让报表更生动

可 视 化 l 可视化 Power BI 中的视觉对象简介 实现数据可视化是 Power BI 的核心部分&#xff08;像我们在本课程前面所定义那样&#xff0c;它是基本的构建基块&#xff09;&#xff0c;而创建视觉对象是发现并共享你的见解的最简方法。 Power BI 默认提供众多可视化效果…

LeetCode 978. 最长湍流子数组(DP)

1. 题目 当 A 的子数组 A[i], A[i1], ..., A[j] 满足下列条件时&#xff0c;我们称其为湍流子数组&#xff1a; 若 i < k < j&#xff0c;当 k 为奇数时&#xff0c; A[k] > A[k1]&#xff0c;且当 k 为偶数时&#xff0c;A[k] < A[k1]&#xff1b;或 若 i < …

Power BI数据建模

l 建模 通常情况下&#xff0c;你将会连接到多个数据源以创建报表&#xff0c;且需所有数据协同工作。 建模就是实现这一点的办法。 若要创建不同数据源之间的逻辑连接&#xff0c;需创建一种关系。 数据源之间的关系使 Power BI 能够了解表与表之间的关系&#xff0c;以便能…

Asp.Net文件和文件夹操作大全

/// <summary> /// 创建文件夹 /// </summary> /// <param name"Path"></param> public static void FolderCreate(string Path) { // 判断目标目录是否存在如果不存在则新建之 i…

LeetCode 1283. 使结果不超过阈值的最小除数(二分查找)

1. 题目 给你一个整数数组 nums 和一个正整数 threshold &#xff0c;你需要选择一个正整数作为除数&#xff0c;然后将数组里每个数都除以它&#xff0c;并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个。 每个数除以除数后都向上取…

Power BI 数据可视化软件实现共享报表

l 在 Power BI 中与同事共享和协作 在此模块中&#xff0c;涵盖各种用于与同事共享和协作处理仪表板、报表和数据的方法。例如&#xff0c;你可以&#xff1a; 从 Power BI Desktop 向 Power BI 服务发布报表使用 Power BI Mobile 应用查看共享报表和仪表板并与其交互创建打包…

flash和js通讯的伪沙箱安全错误

加载到页面的flash需要和当前页面上的js通讯的时候&#xff0c;如果是js和flash在同一个域那就没有安全错误发生如果不在同一个域就会有安全错误发生。不在同一个域的flash和js跨域访问的时候 ,可以用下列方式解决跨域问题要在页面上添加参数行:<param name"allowScrip…

LeetCode 1144. 递减元素使数组呈锯齿状(奇偶分别遍历)

1. 题目 给你一个整数数组 nums&#xff0c;每次 操作 会从中选择一个元素并 将该元素的值减少 1。 如果符合下列情况之一&#xff0c;则数组 A 就是 锯齿数组&#xff1a; 每个偶数索引对应的元素都大于相邻的元素&#xff0c;即 A[0] > A[1] < A[2] > A[3] < …

有趣的数学 - 6174数学黑洞 - C/C++代码实现

6174数学黑洞 它的算法如下&#xff1a; 6174黑洞对首个设定的数值有所限制&#xff0c;取任意一个4位数&#xff08;4个数字均为同一个数的除外&#xff09;&#xff0c;将该数的4个数字重新组合&#xff0c;形成可能的最大数和可能的最小数&#xff0c;再将两者之间的差求出…

ActionScript 3.0 组件!

ActionScript 3.0 组件&#xff01; 缓动效果http://code.google.com/p/tweener/ 查询出URL后的所有参数的KEY VAULEhttp://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/#more-141 加载管理&#xff0c;加载资源的管理http://code.google.com/p/queueloader-as3…

LeetCode 1470. 重新排列数组

1. 题目 给你一个数组 nums &#xff0c;数组中有 2n 个元素&#xff0c;按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列&#xff0c;返回重排后的数组。 示例 1&#xff1a; 输入&#xff1a;nums [2,5,1,3,4,7], n 3 …

非线性规划 - 用非线性规划解决问题 - (Lingo建模)

在经营管理中&#xff0c;为取得更高的利润&#xff0c;不仅需要提高经营收入&#xff0c;也要考虑如何在现有的人力、物力和财力条件下合理安排&#xff0c;在满足要求的前提下&#xff0c;达到最低的成本。对于静态的最优化问题&#xff08;即所有数据不会瞬息万变&#xff0…

PHP学习之路(二)让我们开始环境搭建(Windows篇)

在上篇中&#xff0c;我详述了在Windows下配置Zend开发工具的详细过程&#xff0c;但是没有一个开发环境&#xff0c;你再牛B的工具自然也跑不起来&#xff0c;比如没有了.NET Framework&#xff0c;你跑个Visual Studio试试&#xff0c;所以搭建开发环境也是学习程序开发一个必…

线性规划 - 用单纯形法解决整数规划问题 - (Matlab、Lingo建模)

现实生活中&#xff0c;比如机器的台数&#xff0c;参与工作的人数&#xff0c;可调动的车辆数&#xff0c;这些数据都是整数。因此对于变量中包含整数、或者完全是整数的规划问题&#xff0c;我们称之为整数规划。在解决整数规划常用的算法便是单纯形法。 课题名称&#xff1a…

LeetCode 1471. 数组中的 k 个最强值(排序)

1. 题目 给你一个整数数组 arr 和一个整数 k 。 设 m 为数组的中位数&#xff0c;只要满足下述两个前提之一&#xff0c;就可以判定 arr[i] 的值比 arr[j] 的值更强&#xff1a; |arr[i] - m| > |arr[j] - m||arr[i] - m| |arr[j] - m|&#xff0c;且 arr[i] > arr[j…

Oracle 多表 连接 顺序 与 性能关系 测试

一. 创建表并insert 数据 create table ta (id number,name varchar2(10)); create table tb(id number,job varchar2(10)); begin for i in 1..1000000 loop begin insert into ta values(i,dave); commit; end; end loop; end; begin for i in 1..1000000 loop begin if i<…

线性规划 - 用单纯形法解决LP问题 - (Matlab、Lingo建模)

线性规划研究时间较早&#xff0c;在实际应用中也比较成熟&#xff0c;它是一种辅助人们进行科学管理的数学方法&#xff0c;为合理地利用有限的人力、物力、财力等资源作出的最优决策&#xff0c;提供科学的依据。 课题名称&#xff1a;配货问题&#xff0c;使运费收入最大 现…