
上升下降字符串
发布日期:2021-05-09 00:29:42
浏览次数:12
分类:博客文章
本文共 1825 字,大约阅读时间需要 6 分钟。
上升下降字符串
给你一个字符串s
,请你根据下面的算法重新构造字符串:
- 从
s
中选出最小的字符,将它接在结果字符串的后面。 - 从
s
剩余字符中选出最小的字符,且该字符比上一个添加的字符大,将它接在结果字符串后面。 - 重复步骤
2
,直到你没法从s
中选择字符。 - 从
s
中选出最大的字符,将它接在结果字符串的后面。 - 从
s
剩余字符中选出最大的字符,且该字符比上一个添加的字符小,将它接在结果字符串后面。 - 重复步骤
5
,直到你没法从s
中选择字符。 - 重复步骤
1
到6
,直到s
中所有字符都已经被选过。 - 在任何一步中,如果最小或者最大字符不止一个,你可以选择其中任意一个,并将其添加到结果字符串。
请你返回将s
中字符重新排序后的结果字符串。
示例
输入:s = "aaaabbbbcccc"输出:"abccbaabccba"解释:第一轮的步骤 1,2,3 后,结果字符串为 result = "abc"第一轮的步骤 4,5,6 后,结果字符串为 result = "abccba"第一轮结束,现在 s = "aabbcc" ,我们再次回到步骤 1第二轮的步骤 1,2,3 后,结果字符串为 result = "abccbaabc"第二轮的步骤 4,5,6 后,结果字符串为 result = "abccbaabccba"
输入:s = "rat"输出:"art"解释:单词 "rat" 在上述算法重排序以后变成 "art"
输入:s = "leetcode"输出:"cdelotee"
题解
/** * @param {string} s * @return {string} */var sortString = function(s) { let hashTable = Object.create(null); let base = "a".charCodeAt(); for(let i=0;i<26;++i) hashTable[String.fromCharCode(base+i)] = 0; Array.prototype.forEach.call(s, v => hashTable[v]++); let target = ""; while(target.length < s.length){ for(let i=0;i<26;++i) { let key = String.fromCharCode(base+i); if(hashTable[key]){ target += key; hashTable[key]--; } } for(let i=25;i>=0;--i) { let key = String.fromCharCode(base+i); if(hashTable[key]){ target += key; hashTable[key]--; } } } return target;};
思路
题目挺长的,其实就是普通的字符串的操作,并且由于题目中说明了是纯小写字母,也就是总量是确定的,那么就可以不使用排序去统计数量,之后的操作正好也是顺序遍历与逆序遍历即可完成的操作,拼接字符串返回即可。首先定义一个纯对象作为哈希表来记录字符串每种字符的个数,之后定义小写字符的基准数值a
的ASCII
码值,之后构建一个26
个小写字母的循环,将初始哈希表的键对应的值定义为0
,循环字符串,将统计相应字母出现的次数,定义目标字符串,如果目标字符串与给定的字符串长度相等则退出循环,之后定义一个26
字母正向循环,如果在哈希表中这个字母的值大于0
则将其拼接到目标字符串并将该值减1
,之后定义一个26
字母的逆向循环,按照同样的规则将字符拼接,之后完成循环并返回目标字符串即可。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://leetcode-cn.com/problems/increasing-decreasing-string/
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月21日 09时33分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UWP 自定义控件:了解模板化控件 系列文章
2021-05-09
[UWP]从头开始创建并发布一个番茄钟
2021-05-09
在 Azure 上执行一些简单的 python 工作
2021-05-09
WinUI 3 Preview 3 发布了,再一次试试它的性能
2021-05-09
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
2021-05-09
List数组排序
2021-05-09
VMware vSphere 离线虚拟机安装 BIND 9
2021-05-09
说说第一份工作
2021-05-09
dojo/request模块整体架构解析
2021-05-09
dojo/aspect源码解析
2021-05-09
Web性能优化:What? Why? How?
2021-05-09
Javascript定时器学习笔记
2021-05-09
dojo的发展历史
2021-05-09
Liunx百宝箱(Centos补充)
2021-05-09
Python存储系统(Redis)
2021-05-09
C语言指针收藏
2021-05-09
.net 4种单例模式
2021-05-09
T4 生成数据库实体类
2021-05-09
C#搞个跨平台的桌面NES游戏模拟器
2021-05-09
手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)
2021-05-09