当前位置:网站首页>leetcode:358. K 距离间隔重排字符串
leetcode:358. K 距离间隔重排字符串
2022-08-11 02:37:00 【OceanStar的学习笔记】
题目来源
题目描述
class Solution {
public:
string rearrangeString(string str, int k) {
}
};
题目解析
思路:
- 准备:
- 先统计所有字符出现的次数,存入一个map中(key = char, value = count)
- 然后使用map按照重复次数从大到小构建一个大根堆
- 创建一个string ans对象用来表示结果
- 创建一个queue来同步已经加入到ans中的字符
- 循环遍历大根堆的字符
- 先插入的是数字最多的字符,插入之后将这个字符的数量-1,然后把这个字符移到queue中(因为下一次不能插入它了,必须等到长度到达k之后才能插入它)
- 然后判断queue中的元素是否为k,如果是的话,说明队头的元素可以再次尝试去插入了,因此将它放入到大根堆里面
- 最后,当大根堆为空时:
- 如果ans.size == ori.size说明重构完成,返回ans
- 如果ans.size != ori.size,说明还有些字符挂在queue中,重构失败,返回""
class Solution {
public:
string rearrangeString(string str, int k) {
if(k == 0){
return str;
}
int N = str.size();
std::string ans;
std::unordered_map<char, int> m;
// 遍历字符,统计字符的出现次数
for(auto c : str){
m[c]++;
}
// 装入大顶堆,按照字符重复次数作为比较
std::priority_queue<pair<char, int>, std::vector<pair<char, int>>,
cmp> maxHeap(m.begin(), m.end());
std::queue<pair<char, int>> queue;
while (!maxHeap.empty()){
auto curr = maxHeap.top(); maxHeap.pop();// 从大顶堆取出重复次数最多的字符
ans += curr.first;
curr.second--;// 用掉一个字符,次数减一
queue.push(curr);// 放入到queue中,因为k距离后还要用
if(queue.size() == k){
// queue的大小到达了k,也就是说我们已经越过了k个单位,在结果中应该要出现相同的字母了
auto f = queue.front(); queue.pop();
if(f.second > 0){
// 该字符的重复次数大于 0,则添加入大顶堆中,要是0那还加它干嘛
maxHeap.push(f);
}
}
}
return ans.size() == str.size() ? ans : "";
}
};
类似题目
- leetcode:358. K 距离间隔重排字符串
- leetcode:621. Task Scheduler
- leetcode:767. 重构字符串(堆)
边栏推荐
猜你喜欢
OpenCV founder: Open source must not be completely free!
年薪30W,BAT抢着要,懂面试技巧的测试人究竟多吃香?
英伟达 GPU 架构简史
ARM development (4) How to read the chip manual for novice Xiaobai, bare metal driver development steps and pure assembly to achieve lighting, assembly combined with c lighting, c to achieve lighting
通过热透镜聚焦的高斯光束
JS-DOM元素对象
多线程之ThreadPoolExecutor
2022英伟达显卡排名天梯图
MySQL八股文背诵版(续)
[4G/5G/6G专题基础-154]: 5G无线准入控制RAC(Radio Admission Control)
随机推荐
一次简单的 JVM 调优,拿去写到简历里
Mysql_Note3
数据存储全方案----详解持久化技术
JS-DOM元素对象
How to solve the problem of Tomcat booting and crashing
年薪30W,BAT抢着要,懂面试技巧的测试人究竟多吃香?
Docker 链接sqlserver时出现en-us is an invalid culture错误解决方案
alibaba数据同步组件canal的实践整理
MySQL的主从复制+读写分离+分库分表,看这一篇文章就够了
TRCX:掺杂过程分析
ES进阶 函数功能语法新特性详解
117. 本地开发好的 SAP UI5 应用部署到 ABAP 服务器时,中文字符变成乱码的原因分析和解决方案
通过微透镜阵列的传播
CSAPP Data Lab
comp3331-9331-21t1-midterm复习
Detailed explanation of new features of ES advanced array function syntax
YTU 2411: 谁去参加竞赛?【简单循环】
[4G/5G/6G专题基础-154]: 5G无线准入控制RAC(Radio Admission Control)
Inter-process communication method (2) Named pipe
DOM树的遍历-----修改样式,选择元素,创建和删除节点