1405. 最长快乐字符串
如果字符串中不含有任何 ‘aaa’,‘bbb’ 或 ‘ccc’ 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。

给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:

s 是一个尽可能长的快乐字符串。
s 中 最多 有a 个字母 ‘a’、b 个字母 ‘b’、c 个字母 ‘c’ 。
s 中只含有 ‘a’、‘b’ 、‘c’ 三种字母。
如果不存在这样的字符串 s ,请返回一个空字符串 “”。

示例 1:

输入:a = 1, b = 1, c = 7
输出:“ccaccbcc”
解释:“ccbccacc” 也是一种正确答案。
示例 2:

输入:a = 2, b = 2, c = 1
输出:“aabbc”
示例 3:

输入:a = 7, b = 1, c = 0
输出:“aabaa”
解释:这是该测试用例的唯一正确答案。

提示:

0 <= a, b, c <= 100
a + b + c > 0

来源:力扣(LeetCode)


思路分析

这个最长快乐字符串,做起来一点都不快乐,想哭/(ㄒoㄒ)/~~,哪位大佬看到指点一下。
最后实在想不出来了,只AC了24/33组。
这个存在问题的思路先记录下来:

  1. 采用map存储a,b,c三个字符与他们的数目之间的关系数组;
  2. 然后采用优先队列实现每次先考虑的是字符数目最多的字符;
  3. 每次加入生成string中后,就将该类型字符先存储在临时pair类型里面;
  4. 等到下一个字符插入生成字符串后,再将此时临时pair类型放入优先队列,简单来说,就是每次间隔一次,在考虑一次。

代码解析

class Solution {public:string longestDiverseString(int a, int b, int c) {string s;map<string, int> cur;pair<int, string> ted1, ted2;int x = a, y = b, z = c;cur["a"] = a;cur["b"] = b;cur["c"] = c;priority_queue<pair<int,string> > hed;for (auto it = cur.begin(); it != cur.end(); it++) hed.push(make_pair(it->second,it->first));while (hed.size() > 0){if (hed.top().first >= 2) {s += hed.top().second;s += hed.top().second;if (ted1.first != 0 && ted1.second != hed.top().second)hed.push(ted1);ted1 = hed.top();ted1.first -= 2;//数量减少2hed.pop();}else{s += hed.top().second;hed.pop();hed.push(ted1);}}return s;}
};

未实现以下功能

leetcode 1405. 最长快乐字符串相关推荐

  1. LeetCode 1405. 最长快乐字符串(贪心)

    1. 题目 如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」. 给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件 ...

  2. 1405.最长快乐字符串

    难度:中等 目录 一.问题描述 二.思路 1.解题思路 2.极端情况判断 3.解决极端情况 三.解题 1.代码实现 2.时间复杂度 and 空间复杂度 四.总结 一.问题描述 这里直接采用LeetCo ...

  3. 【LeetCode】1405-最长快乐字符串

    题目描述 如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」. 给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的 ...

  4. LeetCode 1392. 最长快乐前缀(KMP)

    1. 题目 「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串. 给你一个字符串 s,请你返回它的 最长快乐前缀. 如果不存在满足题意的前缀,则返回一个空字符串. 示例 ...

  5. leetcode1405. 最长快乐字符串(贪心算法)

    如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」. 给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s ...

  6. LeetCode 5367. 最长快乐前缀

    5367. 最长快乐前缀 思路:前面切=后面切,python.kmp算法待学. class Solution:def longestPrefix(self, s: str) -> str:for ...

  7. leetcode算法题--最长快乐字符串★

    原题链接:https://leetcode-cn.com/problems/longest-happy-string/ 贪心算法 class Solution {public:static bool ...

  8. [动态规划|字符串] leetcode 5 最长回文子串

    [动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...

  9. LeetCode 14.最长公共前缀(字符串)

    上一篇博客:Leetcode 13.罗马数字转整数(字符串)  写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode的 ...

最新文章

  1. 第五课:系统目录及ls·文件类型及alias命令介绍
  2. 浅析大规模DDOS防御架构:应对T级攻防
  3. 窗口分析函数_13_生成相邻上一个元素
  4. 基础笔试编程题(jz)
  5. ue 编写linux脚本,UltraEdit23 sh文件 (shell脚本)着色
  6. defineProperty AND defineProperties
  7. notepad++列编辑操作
  8. 三十天学不会TCP,UDP/IP网络编程-IP头格式祥述
  9. C#之Xml去掉前面的空格
  10. Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
  11. Opencores 无法点击submit的问题解决方案
  12. 基于PHP+MySQL共享自行车租赁管理系统的设计与实现
  13. iphone手机 ios系统 无法更新app 跳转到AppStore 显示 打开
  14. Android Jetpack组件(九)DataStore
  15. 教你如何挑选趁手的笔记本电脑!
  16. 服务器开着但显示器键盘没反应,电脑开机 键盘灯正常亮,可以控制,显示器却没反应 是怎么回事...
  17. iOS app添加桌面快捷方式
  18. 删除商品时,如何不影响订单里该商品相关的信息显示
  19. 100天搞定机器学习:PyYAML基础教程
  20. 如何用java给PDF添加一个图片水印?

热门文章

  1. PyTorch:学习conv1D,conv2D和conv3D
  2. TDD 测试驱动开发笔记
  3. Python制作花名册
  4. 删除数据库中重复的数据
  5. 2021高考赤峰成绩查询,2021年赤峰高考成绩排名及成绩公布时间什么时候出来
  6. 程序员必读的十本图书书单
  7. 递归形成树形结构,去除树结构里面的空children数组
  8. 【集控篇】(6.0) ❀ 08. 被动外网注册设备 ❀ FortiManager 集中管控
  9. 网卡bonding模式
  10. C语言结构体初始化的四种方法