leetcode 3016. 输入单词需要的最少按键次数 II 中等

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

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

现在允许你将编号为 29 的按键重新映射到 不同 字母集合。每个按键可以映射到任意数量 的字母,但每个字母 必须 恰好 映射到 一个 按键上。你需要找到输入字符串 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 仅由小写英文字母组成。

分析:贪心,出现次数越多的字母,应当按键次数越少。首先统计所有字母的出现次数,之后按照出现次数从大到小排序,设每个字母在排序后的数组中出现的位置为 i,则每个字母的按键次数为:i/8+1。

cpp 复制代码
class Solution {
public:
    int minimumPushes(string word) {
        int cnt[30]={0};
        for(int i=0;word[i];++i)
            cnt[word[i]-'a']++;
            
        int ans=0;
        sort(cnt,cnt+30);
        for(int i=29,val=0;i>=0&&cnt[i];--i,++val)
            ans+=cnt[i]*(val/8+1);
        return ans;
    }
};
相关推荐
橘子汽水16816 小时前
Leetcode 198,118打家劫舍,杨辉三角
算法·leetcode
alphaTao19 小时前
LeetCode 每日一题 2026/9/7-2026/9/13
算法·leetcode
土司大王1 天前
LeetCode 79 单词搜索:Java 回溯模板、网格 DFS 与剪枝优化
java·算法·leetcode·深度优先
All for pursuit.1 天前
【数组-5】560.和为K的子数组
数据结构·c++·算法·leetcode
土司大王2 天前
LeetCode 17 电话号码的字母组合:Java 回溯模板、多叉决策树与复杂度分析
java·leetcode·决策树
find1star2 天前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
青山木2 天前
Hot 100 --- 划分字母区间
java·数据结构·算法·leetcode·贪心算法
a187927218312 天前
【算法】双指针与滑动窗口(一):框架总纲——三类问题、一个原理与判决书
算法·leetcode·区间·双指针·滑动窗口·原理·算法讲解