​LeetCode解法汇总2182. 构造限制重复的字符串

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给你一个字符串 s 和一个整数 repeatLimit ,用 s 中的字符构造一个新字符串 repeatLimitedString ,使任何字母 连续 出现的次数都不超过 repeatLimit 次。你不必使用 s 中的全部字符。

返回 字典序最大的 repeatLimitedString 。

如果在字符串 a 和 b 不同的第一个位置,字符串 a 中的字母在字母表中出现时间比字符串 b 对应的字母晚,则认为字符串 a 比字符串 b 字典序更大 。如果字符串中前 min(a.length, b.length) 个字符都相同,那么较长的字符串字典序更大。

示例 1:

输入:s = "cczazcc", repeatLimit = 3
输出:"zzcccac"
解释:使用 s 中的所有字符来构造 repeatLimitedString "zzcccac"。
字母 'a' 连续出现至多 1 次。
字母 'c' 连续出现至多 3 次。
字母 'z' 连续出现至多 2 次。
因此,没有字母连续出现超过 repeatLimit 次,字符串是一个有效的 repeatLimitedString 。
该字符串是字典序最大的 repeatLimitedString ,所以返回 "zzcccac" 。
注意,尽管 "zzcccca" 字典序更大,但字母 'c' 连续出现超过 3 次,所以它不是一个有效的 repeatLimitedString 。

示例 2:

输入:s = "aababab", repeatLimit = 2
输出:"bbabaa"
解释:
使用 s 中的一些字符来构造 repeatLimitedString "bbabaa"。 
字母 'a' 连续出现至多 2 次。 
字母 'b' 连续出现至多 2 次。 
因此,没有字母连续出现超过 repeatLimit 次,字符串是一个有效的 repeatLimitedString 。 
该字符串是字典序最大的 repeatLimitedString ,所以返回 "bbabaa" 。 
注意,尽管 "bbabaaa" 字典序更大,但字母 'a' 连续出现超过 2 次,所以它不是一个有效的 repeatLimitedString 。

提示:

  • 1 <= repeatLimit <= s.length <= 105
  • s 由小写英文字母组成

解题思路:

这里字符串顺序和最终结果无关,所以我们可以使用长度为26的数组,记录每个字符出现的数量,方便后续使用。

可以使用递归的思路,构造一个方法负责拼接字符串。传入值为当前最大的字符位置,然后进行循环,每次选择补充repeatLimit数量的当前剩余最大字符和次大字符,如果补充成功,则继续,否则跳出循环。

当所有字符串都补充完整后,结果就是最终补充完整的字符串。

代码:

class Solution2182
{
public:string outStr = "";string repeatLimitedString(string s, int repeatLimit){vector<int> nums(26);const char *c = s.c_str();while (*c != '\0'){char currentChar = *c;nums[currentChar - 'a']++;c++;}int index = 25;while (index >= 0){if (nums[index] == 0){index--;continue;}int nextIndex = repeatLimitedOneChar(nums, repeatLimit, index);index = nextIndex;}return outStr;}int repeatLimitedOneChar(vector<int> &nums, int repeatLimit, int index){int nextIndex = index - 1;while (nums[index] > 0){int num = min(repeatLimit, nums[index]);for (int i = 0; i < num; i++){outStr += (char)('a' + index);}nums[index] -= num;if (nums[index] == 0 || index == 0){break;}while (nextIndex >= 0 && nums[nextIndex] == 0){nextIndex--;}if (nextIndex < 0){return nextIndex;}outStr += (char)('a' + nextIndex);nums[nextIndex] -= 1;}return nextIndex;}
};

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

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

相关文章

设计模式之迪米特法则:让你的代码更简洁、更易于维护

在软件开发中&#xff0c;设计模式是解决常见问题的最佳实践。其中&#xff0c;迪米特法则是一种非常重要的设计原则&#xff0c;它强调了降低对象之间的耦合度&#xff0c;提高代码的可维护性和可重用性。本文将介绍迪米特法则的概念、重要性以及在实际项目中的应用。 一、迪…

【微服务】springcloud集成sleuth与zipkin实现链路追踪

目录 一、前言 二、分布式链路调用问题 三、链路追踪中的几个概念 3.1 什么是链路追踪 3.2 常用的链路追踪技术 3.3 链路追踪的几个术语 3.3.1 span ​编辑 3.3.2 trace 3.3.3 Annotation 四、sluth与zipkin概述 4.1 sluth介绍 4.1.1 sluth是什么 4.1.2 sluth核心…

使用Ultimate-SD-Upscale进行图片高清放大

之前我们介绍过StableSR进行图片高清放大&#xff0c;如果调的参数过大&#xff0c;就会出现内存不足的情况&#xff0c;今天我们介绍另外一个进行图片高清放大的神器Ultimate-SD-Upscale&#xff0c;他可以使用较小的内存对图像进行高清放大。下面我们来看看如何使用进行操作。…

总线协议:GPIO模拟SMI(MDIO)协议:SMI协议介绍

0 工具准备 TN1305 Technical note IEEE802.3-2018 STM32F4xx中文参考手册 1 SMI介绍 1.1 SMI总体框图 站管理接口SMI&#xff08;Serial Management Interface&#xff09;&#xff0c;也可以称为MDIO接口&#xff08;Management Data Input/Output Interface&#xff09;。…

C语言——内存函数介绍和模拟实现

之前我们讲过一些字符串函数&#xff08;http://t.csdnimg.cn/ZcvCo&#xff09;&#xff0c;今天我们来讲一讲几个内存函数&#xff0c;那么可能有人要问了&#xff0c;都有字符串函数了&#xff0c;怎么又来个内存函数&#xff0c;这不是一样的么&#xff1f; 我们要知道之前…

华为原生 HarmonyOS NEXT 鸿蒙操作系统星河版 发布!不依赖 Linux 内核

华为原生 HarmonyOS NEXT 鸿蒙操作系统星河版 发布&#xff01;不依赖 Linux 内核 发布会上&#xff0c;余承东宣布&#xff0c;HarmonyOS NEXT鸿蒙星河版面向开发者开放申请。 申请链接 鸿蒙星河版将实现原生精致、原生易用、原生流畅、原生安全、原生智能、原生互联6大极致原…

04 思维导图的方式回顾ospf

思维导图的方式回顾OSPF 1 ospf 领行学习思维导图 1.1 ospf 的工作过程 建立领据表同步数据库计算路由表1.2 ospf 的状态 1.3 ospf的报文 1.4 ospf的L

Arduino开发实例-LJ12A3-4-Z/BX 电感式接近传感器驱动

LJ12A3-4-Z/BX 电感式接近传感器驱动 文章目录 LJ12A3-4-Z/BX 电感式接近传感器驱动1、LJ12A3-4-Z/BX 电感式接近传感器介绍2、硬件准备及接线3、代码实现1、LJ12A3-4-Z/BX 电感式接近传感器介绍 接近传感器用于检测附近物体的存在。 LJ12A3-4-Z / BX 传感器有三个引脚,其中两…

ant-desgin的table的上移、下移

文章目录 html部分函数部分 html部分 <a-table :columns"columns" :data-source"dataList" :loading"listLoading" :pagination"false"><template #bodyCell"{ column, record, index }"><template v-if&qu…

修改并配置flutter不同平台的启动图标,很方便就可以修改,全平台支持

Flutter 启动器图标-一个包&#xff0c;简化了更新您的 Flutter 应用程序的启动器图标的任务。完全灵活&#xff0c;允许您选择什么平台&#xff0c;您希望更新的启动器图标&#xff0c;如果你想&#xff0c;选项保留您的旧启动器图标&#xff0c;以防您想恢复到未来的某个时候…

Github操作网络异常笔记

Github操作网络异常笔记 1. 源由2. 解决2.1 方案一2.2 方案二 3. 总结 1. 源由 开源技术在国内永远是“蛋疼”&#xff0c;这些"政治"问题对于追求技术的我们&#xff0c;形成无法回避的障碍。 $ git pull ssh: connect to host github.com port 22: Connection ti…

微电网优化MATLAB:遗传算法(Genetic Algorithm,GA)求解微电网优化(提供MATLAB代码)

一、微网系统运行优化模型 微电网优化是指通过对微电网系统中各个组件的运行状态进行监测和调节&#xff0c;以实现微电网系统的高效运行和能源利用的最大化。微电网是由多种能源资源&#xff08;如太阳能、风能、储能等&#xff09;和负载&#xff08;如建筑、工业设备等&…

02--数据库事务

1、数据库事务 1.1 数据库事务介绍 事务&#xff1a;一组逻辑操作单元,使数据从一种状态变换到另一种状态。 事务处理&#xff08;事务操作&#xff09;&#xff1a;保证所有事务都作为一个工作单元来执行&#xff0c;即使出现了故障&#xff0c;都不能改变这种执行方式。当…

一句话讲清楚什么是CUDA,人人都能听懂的CUDA概念

通俗地说&#xff0c;CUDA是一种协助“CPU任务分发GPU并行处理”的编程模型/平台&#xff0c;用于加速GPU和CPU之间的计算。 也就是说CUDA通过CPU任务分发和GPU并行处理的方式&#xff0c;把计算任务通过CPU分发给GPU进行并行计算加速。而GPU并行计算的能力需要CUDA借助其自带…

Flash读取数据库中的数据

Flash读取数据库中的数据 要读取数据库的记录&#xff0c;首先需要建立一个数据库&#xff0c;并输入一些数据。数据库建立完毕后&#xff0c;由Flash向ASP提交请求&#xff0c;ASP根据请求对数据库进行操作后将结果返回给Flash&#xff0c;Flash以某种方式把结果显示出来。 …

鸿蒙星河版启航,开发者驶入生态新征程

操作系统市场的气候已经不同以往。在鸿蒙决定不再兼容安卓之后&#xff0c;这里正欲长出一片全新的天地。 四年前&#xff0c;华为鸿蒙系统横空出世&#xff0c;彼时它还不完全与安卓和iOS的性质划等号&#xff0c;而是定义为物联网操作系统。而如今的华为鸿蒙要改写故事篇章&…

ctfshow反序列化(web254-web266)

目录 web254 web255 web256 web257 web258 web259 web260 web261 web262 web263 web264 web265 web266 web254 源码 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020…

值得收藏的10个免费扫描PDF转可编辑文本的工具分享

随着技术的不断发展&#xff0c;数字化已成为我们日常生活中的一个重要方面。无论是工作还是个人使用&#xff0c;PDF 文件已成为文档管理中必不可少的元素。但是&#xff0c;某些 PDF 文件包含扫描图像&#xff0c;因此难以编辑或搜索文件中的特定内容。要克服此限制&#xff…

Python实现离散选择泊松模型(Poisson算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 泊松分布&#xff08;一种离散分布&#xff09;&#xff0c;泊松分布适合于描述单位时间内随机事件发生…

Ubuntu22.04安装GitLab

如果我们是自己本地进行开发,使用Git的简单版本管理功能即可。但如果要做协同开发,使用GitLab自己部署Git代码仓库,是一个不错的选择。 笔者曾使用过svn和Git,相比较而言,Git的使用体验更好。 那么我们接下来安装一下。 安装 首先是升级下包源信息 sudo apt update …