这里备战秋招的小M
今天重拾信心,挑战了一道简单的算法题(源于牛客,链接已贴上)。大家可以先思考一下
统计一个字符串出现最多的字母__牛客网 (nowcoder.com)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dO9qTJcx-1658891506240)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b5f13cb4d0724f008cc21b0c4f505e40~tplv-k3u1fbpfcp-watermark.image?)]](https://i-blog.csdnimg.cn/blog_migrate/6cabc1cd2abe68ccdcaa3a0c6b45c4c7.png)
在半个小时的coding后,我发现为啥在vsCode中都ok,但是怎么输入进去就一直报错啊 😰 !!!!慢慢的陷入了沉思,开始逐渐抓狂 💔 !!!
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpBQA7LH-1658891506243)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3372d9277ba746a1b01e4dba2b07fca3~tplv-k3u1fbpfcp-watermark.image?)]](https://i-blog.csdnimg.cn/blog_migrate/09c1e0ee0a6b4e38958ab5376027af01.png)
终于 在不断的思考后💫我睡着了💤
😎第二天,在挣扎中起床,打开电脑,熟练的点开牛客,一键查看解析👀
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhJml2cM-1658891506244)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d3172e1a2894c0786d37f8b1c60c9c4~tplv-k3u1fbpfcp-watermark.image?)]](https://i-blog.csdnimg.cn/blog_migrate/ffb47adce757d41c717d2f49a7f0d3d5.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?)]](https://i-blog.csdnimg.cn/blog_migrate/f2fcfd7b7a9b814c95d670df4e5f8818.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))
小小小小白什么时候能变成算法小白呢😳
如果有不对的地方,欢迎指导
转载:欢迎转载,但未经作者同意,必须保留此段声明;
博主分享了自己在准备秋招时遇到的一道算法题,探讨了如何在VSCode和在线编程环境中处理字符串统计问题。通过将字符串转为数组,使用Map对象计数,最终找到出现最多的字母。过程中遇到在线编辑器的输入问题,并找到了解决办法——使用`readline()`获取输入。文章以轻松的语气记录了解题思路和过程,适合算法初学者阅读。
4454

被折叠的 条评论
为什么被折叠?



