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

给你一个字符串 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 仅由小写英文字母组成。

分析:贪心,出现次数越多的字母,应当按键次数越少。首先统计所有字母的出现次数,之后按照出现次数从大到小排序,设每个字母在排序后的数组中出现的位置为 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;
    }
};
相关推荐
y1su12 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
Xin77018 小时前
LeetCode 46. 全排列(回溯法)
leetcode
文丑颜不良啊20 小时前
LeetCode476~500题目解析
java·leetcode
Tsuki_tl21 小时前
【优选算法:双指针】——复写零题解
java·c++·算法·leetcode·数组·双指针·复写零
Cccp.1231 天前
【leetcode】(十四)从暴力递归到动态规划
数据结构·算法·leetcode·动态规划
旖旎夜光1 天前
LeetCode 215: 数组中的第K个最大元素 (快速排序) —— 题解
c++·学习·算法·leetcode·力控
德彪稳坐倒骑驴1 天前
Leetcode力扣刷题记录与题解
算法·leetcode·职场和发展
java_nnnn2 天前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
文丑颜不良啊2 天前
LeetCode276~300题目解析
java·leetcode
傅科摆 _ py2 天前
链表力扣复习
数据结构·leetcode·链表