当前位置: 首页 > news >正文

【教3妹学编程-算法题】输入单词需要的最少按键次数 II

瑟瑟发抖

2哥 : 叮铃铃,3妹,准备复工了啊,过年干嘛呢,是不是逛吃逛吃,有没有长胖呢。
3妹:切,不想上班,假期能不能重来一遍啊,虽然在家我妈张罗着要给我相亲呢。可是在家还是很好的啊。
2哥 : 相亲?哈哈哈哈
3妹:别笑了,我妈说跟我年龄相等的人都已经孩子上小学了,跟她年龄相等的人孙子最少都会打酱油了。
2哥 :哈哈哈哈,让我先笑一会儿
3妹:话说2哥过年在家里也刷题吗?
2哥:当然了,雷打不动。
3妹:好吧,还得是2哥🐂,我有几天懈怠了。
2哥:好吧,说到刷题啊,今天有一道“最少”的题目, 让我们先做一下吧~

吃瓜

题目:

给你一个字符串 word,由小写英文字母组成。

电话键盘上的按键与 不同 小写英文字母集合相映射,可以通过按压按键来组成单词。例如,按键 2 对应 [“a”,“b”,“c”],我们需要按一次键来输入 “a”,按两次键来输入 “b”,按三次键来输入 “c”。

现在允许你将编号为 2 到 9 的按键重新映射到 不同 字母集合。每个按键可以映射到 任意数量 的字母,但每个字母 必须 恰好 映射到 一个 按键上。你需要找到输入字符串 word 所需的 最少 按键次数。

返回重新映射按键后输入 word 所需的 最少 按键次数。

下面给出了一种电话键盘上字母到按键的映射作为示例。注意 1,*,# 和 0 不 对应任何字母。
image.png
示例 1:
image.png

输入:word = “abcde”
输出:5
解释:图片中给出的重新映射方案的输入成本最小。
“a” -> 在按键 2 上按一次
“b” -> 在按键 3 上按一次
“c” -> 在按键 4 上按一次
“d” -> 在按键 5 上按一次
“e” -> 在按键 6 上按一次
总成本为 1 + 1 + 1 + 1 + 1 = 5 。
可以证明不存在其他成本更低的映射方案。
示例 2:
image.png

输入:word = “xyzxyzxyzxyz”
输出:12
解释:图片中给出的重新映射方案的输入成本最小。
“x” -> 在按键 2 上按一次
“y” -> 在按键 3 上按一次
“z” -> 在按键 4 上按一次
总成本为 1 * 4 + 1 * 4 + 1 * 4 = 12 。
可以证明不存在其他成本更低的映射方案。
注意按键 9 没有映射到任何字母:不必让每个按键都存在与之映射的字母,但是每个字母都必须映射到按键上。
示例 3:
image.png
输入:word = “aabbccddeeffgghhiiiiii”
输出:24
解释:图片中给出的重新映射方案的输入成本最小。
“a” -> 在按键 2 上按一次
“b” -> 在按键 3 上按一次
“c” -> 在按键 4 上按一次
“d” -> 在按键 5 上按一次
“e” -> 在按键 6 上按一次
“f” -> 在按键 7 上按一次
“g” -> 在按键 8 上按一次
“h” -> 在按键 9 上按两次
“i” -> 在按键 9 上按一次
总成本为 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 2 * 2 + 6 * 1 = 24 。
可以证明不存在其他成本更低的映射方案。

提示:

1 <= word.length <= 10^5
word 仅由小写英文字母组成。

思路:

思考

贪心算法,
统计每个字母的出现次数,按照出现次数从大到小排序。

根据 排序不等式,出现次数前 8 大的字母,只需要按一次;出现次数前 9 到 16 大的字母,需要按两次;依此类推。

把出现次数和对应的按键次数相乘再相加,得到的按键次数之和就是最小的。

java代码:


class Solution {public int minimumPushes(String word) {int[] cnt = new int[26];for (char b : word.toCharArray()) {cnt[b - 'a']++;}Arrays.sort(cnt);int ans = 0;for (int i = 0; i < 26; i++) {ans += cnt[25 - i] * (i / 8 + 1);}return ans;}
}
http://www.lryc.cn/news/301276.html

相关文章:

  • 突破编程_C++_高级教程(多线程编程实例)
  • 精读《Function Component 入门》
  • 类的构造方法
  • ChatGPT和LLM
  • 「优选算法刷题」:判定字符是否唯一
  • 详解自定义类型:枚举与联合体!
  • 第13章 网络 Page738~741 13.8.3 TCP/UDP简述
  • Tomcat要点总结
  • Ubuntu 20.04 安装RVM
  • Ps:污点修复画笔工具
  • JAVA面试题17
  • 数据备份和恢复
  • 核心篇 - 集成IS-IS配置实战
  • 【OpenAI Sora】开启未来:视频生成模型作为终极世界模拟器的突破之旅
  • MVC 、DDD、中台、Java SPI(Service Provider Interface)
  • C++单例模式的实现
  • rust函数 stuct struct方法 关联函数
  • 浅谈基于中台模式的大数据生态体系的理解
  • MySQL的锁机制
  • 已解决ImportError: cannot import name ‘PILLOW_VERSION‘异常的正确解决方法,亲测有效!!!
  • 力扣:300. 最长递增子序列
  • Swing程序设计(10)列表框,文本框,文本域,密码框
  • 【Java八股面试系列】JVM-常见参数设置
  • 【Python--Web应用框架大比较】
  • Effective Objective-C 学习第三周
  • 人工智能学习与实训笔记(四):神经网络之NLP基础—词向量
  • 【教程】Kotlin语言学习笔记(一)——认识Kotlin(持续更新)
  • MySQL性能分析1
  • 四、案例 - Oracle数据迁移至MySQL
  • ABC340 A-F题解