【力扣·每日一题】2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)

题目链接

题意

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

返回 字典序最大的 repeatLimitedString 。

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

1 < = r e p e a t L i m i t < = s . l e n g t h < = 1 0 5 1 <= repeatLimit <= s.length <= 10^5 1<=repeatLimit<=s.length<=105
s 由小写英文字母组成

思路

贪心的构造

  • 每次将当前剩余的字典序最大的字符添加到答案里,如果该字符已经连续出现了repeatLimit 次,则先将当前剩余的字典序次大的字符添加到答案里,再继续将当前剩余的字典序最大的字符添加到答案里,直到该最大的字符用完或是没有次大的字符可以插入

有两种写法

  1. 多层for循环,不断尝试填入新字符
    • 结合上述的思路可以得知,每个字符i最多被添加min(repeatLimit,mp[i])次,其中mp[i]为字符i的出现次数
    • 可以先统计字符串s里每个字符的出现次数
    • 倒序进行遍历,这时候i里维护的就是当前剩余的字典序最大的字符
    • 尝试将字符i添加到答案字符串里
    • 如果i已经填完了的话,跳出循环,找下一个当前剩余的字典序最大的字符
    • 否则的话找第一个存在且字典序次大的字符,插入到答案字符串里,这样后面就可以继续填字母i
  2. 使用优先队列维护字典序最大字符和次大字符
    • 思路1的本质是通过for循环找当前剩余的字典序最大/次大的字符,可以通过优先队列来维护

代码

在这里插入图片描述

func repeatLimitedString(s string, repeatLimit int) string {mp := make(map[rune]int, 26)for _, ch := range s {mp[ch]++}ans := make([]rune,0,len(s))for i := 'z'; i >= 'a'; i-- {//倒序填入字母las := i - 1//记录次小的字母值for {for j := 0; j < repeatLimit && mp[i] > 0; j++ {//最多填入min(repeatLimit,mp[i])个字母imp[i]--ans = append(ans, i)}if mp[i] == 0 {//i填完了 找下一个字典序最大的字母break}for las >= 0 && mp[las] == 0 {//找到第一个存在的字典序次大的字母las--}if las < 0 {//找不到 跳出break}//先填入次大字母 后面可以继续填最大字母imp[las]--ans = append(ans, las)}}return string(ans)
}

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

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

相关文章

[易语言]易语言部署yolox的onnx模型

【官方框架地址】 https://github.com/Megvii-BaseDetection/YOLOX 【算法介绍】 YOLOX是YOLO系列目标检测算法的进一步演变和优化。它由Megvii Technology的研究团队开发&#xff0c;是一个高性能、可扩展的对象检测器。YOLOX在保留快速处理速度的同时&#xff0c;通过引入一…

textarea文本框根据输入内容自动适应高度

第一种&#xff1a; <el-input auto-completeoff typetextarea :autosize"{minRows:3,maxRows:10}" class"no-scroll"> </el-input> /* 页面的样式表 */ .no-scroll textarea {overflow: hidden; /* 禁用滚动条 */resize: none; /* 禁止用户…

NetApp E系列(E-Series)OEM产品介绍以及如何收集日志和保存配置信息

NetApp E系列是NetApp收购LSI存储后建立的一条新的产品线&#xff0c;由于LSI存储的历史悠久&#xff0c;所以这条产品线给NetApp带来了很多的OEM产品&#xff0c;可以说E系列是世界上OEM给最多公司的存储产品线也不为过&#xff0c;因为最早LSI的产品销售测率就是OEM&#xff…

2024.1.9 Spark SQL day06 homework,数据清洗

目录 一. Spark SQL中数据清洗的API有哪些&#xff0c;各自作用是什么&#xff1f; 二. 设置Spark SQL的shuffle分区数的方式有哪几种 三. 数据写出到数据库需要注意什么? 四. Spark程序运行集群分类 一. Spark SQL中数据清洗的API有哪些&#xff0c;各自作用是什么&#x…

JQuery过滤选择器-如何让某个元素换颜色(俩种方式)

目录 一、过滤选择器&#xff1a;eq二、过滤选择器 : lt 前言 : 在做项目时经常会遇到列表或者选择某个元素 一、过滤选择器&#xff1a;eq :eq (index)匹配一个给定索引值的元素 $("ul li:eq(0)").css("color","red");二、过滤选择器 : lt …

2024-01-11 部署Stable Diffusion遇挫记

点击 <C 语言编程核心突破> 快速C语言入门 部署Stable Diffusion遇挫记 前言一、一如既往的GitHub部署二、使用的感受总结 create by Stable Diffusion; prompt: fire water llama 前言 要解决问题: 由于近期的努力, 已经实现语音转文字模型, 通用chat迷你大模型的本地…

怎么把workspace的数据导入到simulink进行FFT分析?

怎么把数据导入到simulink在这篇博客已经阐述了&#xff0c;那么如何把数据导入到simulink还能进行FFT分析呢&#xff1f; 首先我们看simulink的FFT分析界面&#xff0c;&#xff08;前置步骤&#xff1a;导入powergui模块&#xff0c;双击powergui模块&#xff0c;Tool选项卡…

使用curl发送时间参数

# 获取当前日期 current_date$(date %Y-%m-%d)# 获取前一天的0点和23:59:59的时间&#xff0c;并格式化为yyyy-MM-dd 24hh:mm:ss begin_time$(date -d "yesterday 00:00:00" %Y-%m-%d\ %H:%M:%S) end_time$(date -d "yesterday 23:59:59" %Y-%m-%d\ %H:%M:…

发动机装备3d虚拟在线云展馆360度展示每处细节

在当今数字化的时代&#xff0c;消费者对于线上购物的需求与期待日益增长。尤其在购车这一大宗消费行为上&#xff0c;消费者不再满足于传统的图片与文字介绍。为了满足这一市场需求&#xff0c;我们引入了3D线上展示技术。 3D汽车模型实景互动展示是一种通过先进的三维建模技术…

【密码学】python密码学库pycryptodome

记录了一本几乎是10年前的书&#xff08;python绝技–用python成为顶级黑客&#xff09;中过时的内容 p20 UNIX口令破解机 里面提到了python标准库中自带的crypt库&#xff0c;经验证Python 3.12.1中并没有这个自带的库&#xff0c;密码学相关的库目前&#xff08;2024.1.12&a…

生成函数——裴蜀定理

有三种数量无限的砝码和一个天平&#xff0c;天平的一端有一个质量为 m 的物品&#xff0c;问能否通过放置砝码使得天平平衡&#xff1f; 输入 第一行包含一个整数 T (1 ≤ T ≤ 1e5)&#xff0c;表示测试用例的组数。 每组测试用例的第一行包含四个整数 a,b,c,m (1 ≤ a,b,c,…

R语言【paleobioDB】——pbdb_occurrences():从PBDB获取多个化石记录号的基本信息

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新&#xff0c;该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后&#xff0c;执行本地安装。 Usage pbdb_occurrences(...) Arguments 参数【...】…

一杯干红葡萄酒的酿造

一杯干红葡萄酒的酿造 一、什么是干红葡萄酒&#xff1f; 干红葡萄酒是指葡萄酒在酿造后&#xff0c;酿酒原料(葡萄汁)中的糖分完全转化成酒精&#xff0c;残糖量小于或等于4.00/L的红葡萄酒。 干红葡萄酒按颜色分可以分为 1&#xff0c;白葡萄酒:选择用白葡萄或浅色果皮的酿…

Linux命令行系列:Netcat网络工具

在大多数Linux发行版中&#xff0c;Netcat已经预装。如果需要安装或确保最新版本&#xff0c;请使用系统特定的包管理工具。例如&#xff0c;在Ubuntu上&#xff0c;可以使用以下命令安装Netcat&#xff1a; sudo apt-get install netcat 1、基本用法是在两台计算机之间建立简…

C++随机数生成:std标准库和Qt自带方法(未完待续)

std标准库 std::rand()是C中的一个随机数函数&#xff0c;它生成一个范围在0到RAND_MAX之间的伪随机整数。 在使用std::rand()之前&#xff0c;需要包含<cstdlib>头文件。 #include <cstdlib> 设置种子 在每次程序运行时&#xff0c;通常需要使用不同的种子值…

自定义数据实现SA3D

SA3D&#xff1a;Segment Anything in 3D with NeRFs 实现了3D目标分割 原理是利用SAM(segment anything) 模型和Nerf分割渲染3D目标&#xff0c; SAM只能分块&#xff0c;是没有语义标签的&#xff0c;如何做到语义连续&#xff1f; SA3D中用了self-prompt, 根据前一帧的mask…

打通商城与ERP系统,实现物料自动同步

【客户介绍】 某文化传播有限公司是一家专注于为企业提供品牌营销、公关传播、活动策划、数字营销等服务的综合性文化传播公司。该公司拥有一支经验丰富的专业团队&#xff0c;具有丰富的品牌营销、公关传播、活动策划、数字营销经验。该公司自成立以来&#xff0c;已经为数百…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存&#xff08;C#&#xff09;&#xff09; Baumer工业相机Baumer工业相机的图像高速保存的技术背景Baumer工业相机通过NEOAPI SDK函数图像高速保存在NEOAPI SDK里实现线程高速图像保存&#xff1a;工业相机高…

STM32 定时器输入捕获1——初始化配置

当想检测高电平或低电平的持续时间的时候&#xff0c;就可以使用定时器输入捕获。例如示波器就是用到这个功能。这里就讲解一下定时器到底是如何输入捕获的&#xff1a; 由上图我们可以知道&#xff0c;周期 是每次连续的上升沿的时间差&#xff08;例如&#xff1a;T第二个方波…

Matlab并行计算实践

Matlab并行计算实践 需要对上万张图像进行OCR识别。OCR算法原型用Matlab脚本实现,对每张图逐行逐字符识别,整体计算时间很长。找多核多CPU并行执行的方案 Matlab有并行工具箱。可以使用parfor对循环进行并行处理&#xff0c;parfor要求循环之间的运算独立不相关&#xff1b;另…