当前位置:网站首页>删除字符串中出现次数最少的字符【JS,Map排序,正则】
删除字符串中出现次数最少的字符【JS,Map排序,正则】
2022-07-04 17:16:00 【qq_22841387】
问题描述
删除字符串中出现次数最少的字符_牛客题霸_牛客网 (nowcoder.com)
题目几个重点
- 删除所有次数为最少的字符
- 保证原来序列
解决代码
var value = readline();
let strMap = new Map();
let singleValue , cnt;
let i = 0 ;
while(value[i]){
singleValue = value[i];
if(strMap.has(singleValue)){
cnt = strMap.get(singleValue);
cnt ++;
strMap.set(singleValue , cnt);
}else{
strMap.set(singleValue , 1);
}
i ++;
}
let arr = Array.from(strMap)
// console.log(Math.min(...arr))
arr.sort((a , b) => {
return a[1] - b[1];
})
let minNum = arr[0][1];
let key
for(const item of strMap ){
key = item[0]
if(strMap.get(key) === minNum){
const reg = new RegExp(key , 'g')
value = value.replace(reg,'');
}
}
console.log(value);
刷题总结
1.初始化各个字符个数
直接通过while循环遍历value原始字符串,while(value[i])
,因为value对应位置i不存在是会以undefined
存在,while中会自动转换成boolean类型的值,对应的undefined的就是falsy(假值)
- 判断是否
map
中是否存在- 若存在,对应的数字++
- 若不存在,则通过set设置值
while(value[i]){
singleValue = value[i];
if(strMap.has(singleValue)){
cnt = strMap.get(singleValue);
cnt ++;
strMap.set(singleValue , cnt);
}else{
strMap.set(singleValue , 1);
}
i ++;
}
2.map排序
map排序大致思想:通过转换成数组,调用数组的sort,并重写sort默认排序规则
- 将map转换为数组
let arr = Array.from(map类型的变量)
- 重写数组排序规则
按value排序——降序
arr.sort( ( a , b) => {
return a[1] - b[1];
})
按key排序
arr.sort( ( a , b ) => {
return a[0] - b[0]
})
3.replace替换所有——正则
由于牛客不支持replaceAll方法,所以需要自己实现一个。
而且题目中要求删除所有最小值,所以我们需要对map进行循环遍历
,通过排序找到最小值
后,判断每一个key的value是否与最小值相等
若相等,对原串进行替换
if(strMap.get(key) === minNum){
const reg = new RegExp(key , 'g');
value = value.replace(reg,'');
}
这里也有几个小知识点
- 正则全局删——
/g
- 删除value中的值——
replace(reg ,'')
- replace返回替换的字符串
边栏推荐
- Lua emmylua annotation details
- How is the entered query SQL statement executed?
- I always thought that excel and PPT could only be used for making statements until I saw this set of templates (attached)
- 激进技术派 vs 项目保守派的微服务架构之争
- [211] go handles the detailed documents of Excel library
- Li Kou brush question diary /day1/2022.6.23
- 【机器学习的数学基础】(一)线性代数(Linear Algebra)(上+)
- NBA赛事直播超清画质背后:阿里云视频云「窄带高清2.0」技术深度解读
- 力扣刷题日记/day7/2022.6.29
- [go ~ 0 to 1] read, write and create files on the sixth day
猜你喜欢
能源行业的数字化“新”运维
中国农科院基因组所汪鸿儒课题组诚邀加入
Li Kou brush question diary /day6/6.28
力扣刷题日记/day3/2022.6.25
What types of Thawte wildcard SSL certificates provide
Halcon template matching
uni-app与uviewUI实现仿小米商城app(附源码)
.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
Basic tutorial of scala -- 16 -- generics
NBA赛事直播超清画质背后:阿里云视频云「窄带高清2.0」技术深度解读
随机推荐
力扣刷題日記/day6/6.28
[209] go language learning ideas
爬虫(6) - 网页数据解析(2) | BeautifulSoup4在爬虫中的使用
Li Kou brush question diary /day7/6.30
力扣刷题日记/day6/6.28
How is the entered query SQL statement executed?
Grain Mall (I)
repeat_P1002 [NOIP2002 普及组] 过河卒_dp
Li Kou brush question diary /day8/7.1
基于C语言的菜鸟驿站管理系统
Li Kou brush question diary /day7/2022.6.29
Microservice architecture debate between radical technologists vs Project conservatives
一种将Tree-LSTM的强化学习用于连接顺序选择的方法
激进技术派 vs 项目保守派的微服务架构之争
使用SSH
Li Kou brush question diary /day1/2022.6.23
Imitation of numpy 2
ESP32-C3入门教程 问题篇⑫——undefined reference to rom_temp_to_power, in function phy_get_romfunc_addr
Scala基础教程--19--Actor
Unity 制作旋转门 推拉门 柜门 抽屉 点击自动开门效果 开关门自动播放音效 (附带编辑器扩展代码)