【教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 不 对应任何字母。

示例 1:

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

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

输入: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;}
}相关文章:
【教3妹学编程-算法题】输入单词需要的最少按键次数 II
2哥 : 叮铃铃,3妹,准备复工了啊,过年干嘛呢,是不是逛吃逛吃,有没有长胖呢。 3妹:切,不想上班,假期能不能重来一遍啊,虽然在家我妈张罗着要给我相亲呢。可是在家还是很好的…...
突破编程_C++_高级教程(多线程编程实例)
1 生产者-消费者模型 生产者-消费者模型是一种多线程协作的设计模式,它主要用于处理生产数据和消费数据的过程。在这个模型中,存在两类线程:生产者线程和消费者线程。生产者线程负责生产数据,并将其放入一个共享的数据缓冲区&…...
精读《Function Component 入门》
1. 引言 如果你在使用 React 16,可以尝试 Function Component 风格,享受更大的灵活性。但在尝试之前,最好先阅读本文,对 Function Component 的思维模式有一个初步认识,防止因思维模式不同步造成的困扰。 2. 精读 什…...
类的构造方法
在类中,出成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。每个类实例化一个对象时,类都会自动调用构造方法。 构造方法的特点: 构…...
ChatGPT和LLM
ChatGPT和LLM(大型语言模型)之间存在密切的关系。 首先,LLM是一个更为抽象的概念,它包含了各种自然语言处理任务中使用的各种深度学习模型结构。这些模型通过建立深层神经网络,根据已有的大量文本数据进行文本自动生成…...
「优选算法刷题」:判定字符是否唯一
一、题目 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1: 输入: s "leetcode" 输出: false 示例 2: 输入: s "abc" 输出: true限制: 0 < len(s) < 100 s[i]仅包含小写字母 二…...
详解自定义类型:枚举与联合体!
目录 编辑 一、枚举类型 1.枚举类型的声明 2.枚举类型的优点 3.枚举类型的使用 二、联合体类型(共用体) 1.联合体类型的声明 2.联合体的特点 3.相同成员的结构体和联合体的对比 4.联合体大小的计算 5.用联合体判断大小端 三.完结散花 悟已往之不谏&…...
第13章 网络 Page738~741 13.8.3 TCP/UDP简述
libcurl是C语言写成的网络编程工具库,asio是C写的网络编程的基础类型库 libcurl只用于客户端,asio既可以写客户端,也可以写服务端 libcurl实现了HTTP\FTP等应用层协议,但asio却只实现了传输层TCP/UDP等协议。 在学习http时介绍…...
Tomcat要点总结
一、Tomcat 服务中部署 WEB 应用 1.什么是Web应用 (1) WEB 应用是多个 web 资源的集合。简单的说,可以把 web 应用理解为硬盘上的一个目录, 这个目录用于管理多个 web 资源。 (2)Web 应用通常也称之为…...
Ubuntu 20.04 安装RVM
RVM是管理Ruby版本的工具,使用RVM可以在单机上方便地管理多个Ruby版本。 下载安装脚本 首先使下载安装脚本 wget https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer 如果出现了 Connection refused 的情况, 可以考虑执行以下命令修改dns,再执…...
Ps:污点修复画笔工具
污点修复画笔工具 Spot Healing Brush Tool专门用于快速清除图像中的小瑕疵、污点、尘埃或其他不想要的小元素。 它通过分析被修复区域周围的内容,无需手动取样,自动选择最佳的修复区域来覆盖和融合这些不完美之处,从而实现无痕修复的效果。 …...
JAVA面试题17
什么是Java中的静态内部类?它与非静态内部类有什么区别? 答案:静态内部类是定义在另一个类中的类,并且被声明为静态。与非静态内部类不同,静态内部类不依赖于外部类的实例,可以直接访问外部类的静态成员。 …...
数据备份和恢复
数据备份和恢复 什么情况下会用到数据备份呢 数据丢失的场景 人为误操作造成的某些数据被误操作 软件BUG造成数据部分或者全部丢失 硬件故障造成数据库部分或全部丢失 安全漏洞被入侵数据恶意破坏 非数据丢失场景 基于某个时间点的数据恢复 开发测试环境数据库搭建 相同数据库的…...
核心篇 - 集成IS-IS配置实战
文章目录 一. 实验专题1.1. 实验1:配置单区域集成IS-IS1.1.1. 实验目的1.1.2. 实验拓扑1.1.3. 实验步骤(1)配置IP地址(2)配置IS-IS 1.1.4. 实验调试(1)查看邻接表(2)查看…...
【OpenAI Sora】开启未来:视频生成模型作为终极世界模拟器的突破之旅
这份技术报告主要关注两个方面:(1)我们的方法将各种类型的视觉数据转化为统一的表示形式,从而实现了大规模生成模型的训练;(2)对Sora的能力和局限性进行了定性评估。报告中不包含模型和实现细节…...
MVC 、DDD、中台、Java SPI(Service Provider Interface)
文章目录 引言I 单体架构DDD实现版本1.1 核心概念1.2 DDD四层架构规范1.3 案例1.4 请求转发流程II 领域服务调用2.1 菱形对称架构2.2 中台III Java SPI3.1 概念3.2 实现原理3.3 例子:本地SPI找服务see alsojava -cp</...
C++单例模式的实现
单例模式就是在整个程序运行期都只有一个实例。在代码实现方面,我们要限制new出多于一个对象这种情况的发生。而不是仅仅依靠无保障的约定。 目前大多数的编程语言的做法都是私有化构造函数,对外提供一个获取实例的接口。这样做的目的使实例的创建不能在…...
rust函数 stuct struct方法 关联函数
本文结合2个代码实例主要介绍了rust函数定义方法,struct结构体定义、struct方法及关联函数等相关基础知识。 代码1: main.rc #[derive(Debug)]//定义一个结构体 struct Ellipse {max_semi_axis: u32,min_semi_axis: u32, }fn main() {//椭圆࿰…...
浅谈基于中台模式的大数据生态体系的理解
这篇文章主要浅谈一下我对大数据生态体系建设的理解。 大数据生态系统为高并发,高吞吐,高峰值,高堆积等大规模数据的采集,处理,计算,存储,服务提供了完善的处理体系,致力于打造核心数…...
MySQL的锁机制
一:概述 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢); 在数据库中,除传统的计算资源(如CPU,RAM,I/O等)的争用以外,数据也是一种供许多用…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
