LeetCode 2182. 构造限制重复的字符串(贪心、map)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个字符串 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 <= 10^5
s 由小写英文字母组成

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

2. 解题

  • map 对字符计数,map是有序的,为了获得字典序最大,逆序开始取
  • 每次判断字符串的末尾跟map最末尾的元素是否一样,不一样就取最多 repeatLimit 次,一样的话,就取 倒数第二个 元素 1 次
class Solution {
public:string repeatLimitedString(string s, int repeatLimit) {map<char,int> m;for(auto c : s)++m[c];string ans;while(!m.empty()){int ct = repeatLimit;auto it = m.end();it--; // 最后一个元素if(it->first == ans.back()){ // ans最后的字符 跟 最大的字符 一样                if(it == m.begin())break; // 没有第二大的字符了,结束else{it--;// 有第二大的,取一个出来就行了ans.push_back(it->first);if(--(it->second)==0)m.erase(it);}}else{ // ans最后的字符 跟 最大的字符 不一样   while(ct && !m.empty()){ans.push_back(it->first);if(--(it->second)==0){m.erase(it);break;}ct--;}}}return ans;}
};

104 ms 24 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

Web框架——Flask系列之WTF表单验证练习(七)

一、Web表单 web表单是web应用程序的基本功能。 它是HTML页面中负责数据采集的部件。表单有三个部分组成&#xff1a;表单标签、表单域、表单按钮。表单允许用户输入数据&#xff0c;负责HTML页面数据采集&#xff0c;通过表单将用户输入的数据提交给服务器。 在Flask中&…

LeetCode 2185. 统计包含给定前缀的字符串

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 words 和一个字符串 pref 。 返回 words 中以 pref 作为 前缀 的字符串的数目。 字符串 s 的 前缀 就是 s 的任一前导连续字符串。 示例 1&#xff1a; 输入&#xff1a;words ["pay","attention",…

Web框架——Flask系列之Flask-SQLAlchemy安装与使用 定义数据模型(八)

Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象&#xff0c;让开发者不用直接和 SQL 语句打交道&#xff0c;而是通过 Python 对象来操作数据库&#xff0c;在舍弃一些性能开销的同时&#xff0c;换来的是开发效率的较大提升SQLAlchemy是一个关系型数据库框架…

多线程篇-NSThread-简单使用

创建的三种方式 第一种 介绍/*alloc init 创建第一个参数&#xff1a;目标对象第二个参数&#xff1a;选择器&#xff0c;线程启动要调用哪个方法第三个参数&#xff1a;前面方法要接收的参数&#xff08;最多只能接收一个参数&#xff0c;没有则传nil&#xff09;*/ NSThread …

LeetCode 2186. 使两字符串互为字母异位词的最少步骤数

文章目录1. 题目2. 解题1. 题目 给你两个字符串 s 和 t 。在一步操作中&#xff0c;你可以给 s 或者 t 追加 任一字符 。 返回使 s 和 t 互为 字母异位词 所需的最少步骤数。 字母异位词 指字母相同但是顺序不同&#xff08;或者相同&#xff09;的字符串。 示例 1&#xf…

Web框架——Flask系列之Flask-SQLAlchemy数据库的基本操作(九)

数据库基本操作 在Flask-SQLAlchemy中&#xff0c;插入、修改、删除操作&#xff0c;均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前&#xff0c;要先将数据添加到会话中然后调用db.session.commit()方法提交会话。 db.session.add&#xff08;role&…

bash/shell编程学习(2)

先来复习上节重定向的用法&#xff1a; 1.快速清空文件 cat demo.txt < /dev/null注&#xff1a;linux中有一个经典名言【一切皆文件】&#xff0c;/dev/null可以认为是一个特殊的空文件&#xff0c;更形象点&#xff0c;可以理解为科幻片中的黑洞&#xff0c;任何信息重向定…

LeetCode 2187. 完成旅途的最少时间(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个数组 time &#xff0c;其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。 每辆公交车可以 连续 完成多趟旅途&#xff0c;也就是说&#xff0c;一辆公交车当前旅途完成后&#xff0c;可以 立马开始 下一趟旅途。 每辆…

Web框架——Flask系列之综合案例——图书管理系统(十)

一、知识点: 表单创建数据库操作一对多关系演练 二、实现步骤: 创建数据库配置信息,定义模型类创建数据库表,添加测试数据编写html页面,展示数据添加数据删除书籍,删除作者 三、创建数据库连接信息,定义模型 from flask import Flask, render_template, redirect, url_for,…

LeetCode 2190. 数组中紧跟 key 之后出现最频繁的数字

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;同时给你一个整数 key &#xff0c;它在 nums 出现过。 统计 在 nums 数组中紧跟着 key 后面出现的不同整数 target 的出现次数。换言之&#xff0c;target 的出现次数为满足以下条件的 i 的…

Web框架——Flask系列之request请求参数详解(十一)

一、request参数 request 就是flask中代表当前请求的 request 对象&#xff0c;其中一个请求上下文变量(理解成全局变量&#xff0c;在视图函数中直接使用可以取到当前本次请求) from flask import request 就是Flask中表示当前请求的request对象&#xff0c;request对象中保存…

LeetCode 2191. 将杂乱无章的数字排序(自定义排序)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 mapping &#xff0c;它表示一个十进制数的映射规则&#xff0c;mapping[i] j 表示这个规则下将数位 i 映射为数位 j 。 一个整数 映射后的值 为将原数字每一个数位 i &#xff08;0 < i < 9&#xff…

LeetCode 2192. 有向无环图中一个节点的所有祖先(拓扑排序)

文章目录1. 题目2. 解题1. 题目 给你一个正整数 n &#xff0c;它表示一个 有向无环图 中节点的数目&#xff0c;节点编号为 0 到 n - 1 &#xff08;包括两者&#xff09;。 给你一个二维整数数组 edges &#xff0c;其中 edges[i] [fromi, toi] 表示图中一条从 fromi 到 t…

Web框架——Flask系列之Flask创建app对象 路由(十二)

一、初始化参数 import_name: 当前模块名 static_url_path:静态资源的url前缀&#xff0c;默认为‘static’ static_folder: 静态文件目录名&#xff0c;默认‘static’ template_folder: 模板文件目录名&#xff0c;默认‘templates’ 二、配置参数 app.config.from_pyfil…

bootstrap在iframe框架中实现由子页面在顶级页面打开模态框(modal)

我需要完成的效果&#xff1a; 1.在顶级页面打开模态框&#xff0c;并且遮罩层也要再顶级页面 2.单击遮罩层部分&#xff0c;模态框不关闭 问题描述&#xff1a; 不知为什么&#xff0c;可能是bootstrap前端框架添加遮罩层的一些问题。通过子页面在顶级页面打开模态框&#xff…

RIP协议及距离向量算法(详解)

一、路由选择协议分类回顾 二、RIP协议 RIP是一种分布式的基于距离向量的路由选择协议&#xff0c;是因特网的协议标准&#xff0c;最大优点是简单。 RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录&#xff08;即一组距离&#xff09;。…

LeetCode 2194. Excel 表中某个范围内的单元格

文章目录1. 题目2. 解题1. 题目 Excel 表中的一个单元格 (r, c) 会以字符串 "<col><row>" 的形式进行表示&#xff0c;其中&#xff1a; <col> 即单元格的列号 c 。用英文字母表中的 字母 标识。 例如&#xff0c;第 1 列用 ‘A’ 表示&#xff…

OSPF协议及链路状态算法(详解)

一、路由选择协议分类回顾 二、OSPF协议 开放最短路径优先OSPF协议&#xff1a;“开放”标明OSPF协议不是受某一家厂商控制&#xff0c;而是公开发表的&#xff1b;“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。OSPF最主要的特征就是使用分布式的链路状态协议…

LeetCode 2196. 根据描述创建二叉树(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 descriptions &#xff0c;其中 descriptions[i] [parenti, childi, isLefti] 表示 parenti 是 childi 在 二叉树 中的 父节点&#xff0c;二叉树中各节点的值 互不相同 。此外&#xff1a; 如果 isLefti 1 &#xff0…

Web框架——Flask系列之abort函数与自定义异常处理(十三)

一、abort函数 使用abort函数可以立即终止视图函数的执行&#xff0c;并可以返回给前端特定的信息 传递状态码信息&#xff0c;必须是标准的http状态码 abort(403)传递响应体信息 resp Response(“login failed”) abort(resp) from flask import Flask,request,abort,Resp…