当前位置:网站首页>第一次写对牛客的编程面试题:输入一个字符串,返回该字符串出现最多的字母
第一次写对牛客的编程面试题:输入一个字符串,返回该字符串出现最多的字母
2022-08-02 01:01:00 【MOAN.】
这里备战秋招的小M
今天重拾信心,挑战了一道简单的算法题(源于牛客,链接已贴上)。大家可以先思考一下
统计一个字符串出现最多的字母__牛客网 (nowcoder.com)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dO9qTJcx-1658891506240)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b5f13cb4d0724f008cc21b0c4f505e40~tplv-k3u1fbpfcp-watermark.image?)]](/img/94/cdb89cebec3f5d7d35c44b0e8bb51a.png)
在半个小时的coding后,我发现为啥在vsCode中都ok,但是怎么输入进去就一直报错啊 !!!!慢慢的陷入了沉思,开始逐渐抓狂 !!!
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpBQA7LH-1658891506243)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3372d9277ba746a1b01e4dba2b07fca3~tplv-k3u1fbpfcp-watermark.image?)]](/img/6b/02180259e0abbd0f50ad1d96092e45.png)
终于 在不断的思考后我睡着了
第二天,在挣扎中起床,打开电脑,熟练的点开牛客,一键查看解析
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhJml2cM-1658891506244)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d3172e1a2894c0786d37f8b1c60c9c4~tplv-k3u1fbpfcp-watermark.image?)]](/img/3b/14f7a6d5b4fd6a7c1a82784aa0b46e.png)
在我的不断尝试下,还是一个测试案例都通不过
在我的不懈努力下,发现了在线编程题的coding“秘密”
为啥我在vscode中代码是对的,但输入在线编辑器就报错
前提:代码逻辑正确
首先,不要以函数的形式输入进去,就直接将逻辑代码写入即可
那我怎么写测试参数呢
这就是我发现的最重要的秘密:readline();//获取输入字符串``
这样就可以直接获得在线编辑器的测试数据啦
like this
let str = readline();//获取输入字符串
如果是固定好的测试数据,就只能输入固定的答案,所以通不过测试用例
let str = 'aaccc' 我之所以报错的原因之一就是这样干的
其次,记得一定要输入答案哈
解题思路
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZxBO6MV-1658891506245)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0c3b71ca41ee43d29c15fa022e36d71b~tplv-k3u1fbpfcp-watermark.image?)]](/img/2f/c59b87882b9c3c0a10e98c260c95a4.png)
再来看下题目,也就是输入aab=> a , aaccc=>c , aabbcccddddd => d
道理咱都懂,对我我这种算法小小小小小白而言,第一次想到的是 下标计数法
但是明显是行不通的
思路:
1.处理字符串,将字符串转化为数组去遍历每一个字符(split()将字符串分割为数组)
2.新建一个map对象存储每一个字符key和出现次数value(相当于一个计数器)
3.for循环遍历(用for…in也是可以的),并判断map的key中是否存在当前的字符,存在则value+1;不存在则set一个,value设为0
4.获取map的value中的最大值(通过循环,找到最大值的同时获得key)
在这个地方我最开始我的思路出现了错误,我想直接用Math.max()直接获取values的最大值就一步到位了,但是我去拿到对应的key好像更麻烦
Math.max(...map.values())
5.输出
代码
let str = readline();//获取输入字符串
const map=new Map()//计数器
let arr = str.split('') //将字符串分割为数组
for(let i = 0 ; i < arr.length;i++){
let val =map.get(arr[i])
if(val){
map.set(arr[i],val+1)
}else{
map.set(arr[i],1)
}
}
let max=0; //最大值
let key
map.forEach((v,k) => {
if(max<v){
max=v
key=k
}
})
console.log(key)
其实代码这样写也是对的,但是注意在线编辑器的一些特点
let str = 'aabbbccccc'
function countCase(str){
//计数器
let map=new Map()
let str2 = str.split('')
for(let i = 0 ; i < str2.length;i++){
let val =map.get(str2[i])
if(val){
map.set(str[i],val+1)
}else{
map.set(str[i],1)
}
}
let max=0;
let key
map.forEach((v,k) => {
if(max<v){
max=v
key=k
}
})
// console.log(key);
return key
}
console.log(countCase(str))
小小小小白什么时候能变成算法小白呢
如果有不对的地方,欢迎指导
转载:欢迎转载,但未经作者同意,必须保留此段声明;
边栏推荐
猜你喜欢
随机推荐
期货开户调整交易所保证金标准
tf.keras.callbacks.EarlyStopping()
Flex layout in detail
js中内存泄漏的几种情况
管理基础知识14
【刷题篇】打家劫舍
mapbox使用教程
外包干了三年,废了...
Kubernetes — 网络流量模型
技术分享 | 接口测试中如何使用Json 来进行数据交互 ?
【目标检测】FCOS: Fully Convolutional One-Stage Object Detection
datagrip 报错 “The specified database userpassword combination is rejected...”的解决方法
60种特征工程操作:使用自定义聚合函数【收藏】
严格模式,use strict
S/4中究竟有多少个模块,你对这些模块了解多少
input禁止输入
TKU记一次单点QPS优化(顺祝ITEYE终于回来了)
Flink_CDC搭建及简单使用
Why is on-chain governance so important, and how will Polkadot Gov 2.0 lead the development of on-chain governance?
管理基础知识21









