https://leetcode.com/problems/minimum-number-of-pushes-to-type-word-ii
3016. Minimum Number of Pushes to Type Word II
给一个字串 word
电话按键映射小写英文字母集合 透过按的次数获得字母
如 2 映射 ['a', 'b', 'c'] 按 1 次得到 a 按 2 次得到 b 按 3 次得到 c
现在将按键 2~9 重新对应到不同字母集合 每个键可以映射到任意数量的字母
找出输入字串所需的最少按键次数
注意 1, *, #, 0 不映射到任何字母
Example 1:
Input: word = "abcde"
Output: 5
Explanation: "a" ~ "e" 分别对应 key 2 ~ 6
合计 1 + 1 + 1 + 1 + 1 = 5
Example 2:
Input: word = "xyzxyzxyzxyz"
Output: 12
Explanation: "x" ~ "z" 分别对应 key 2 ~ 4
合计 1 * 4 + 1 * 4 + 1 * 4 = 12
如范例 2 的图显示 key 可以不对应到任何字母
Example 3:
Input: word = "aabbccddeeffgghhiiiiii"
Output: 24
Explanation: "a" ~ "g" 分别对应 key 2 ~ 8
"h" 对应 two pushes on key 9
"i" 对应 one push on key 9
合计 1 * 2 * 7 + 2 * 2 + 6 * 1 = 24
思路:获得每个字母出现次数后排序由大到小
前8个放在 one push 9~16 放在 two pushes 依此类推 就能得到最少次数
Python Code:
class Solution:
def minimumPushes(self, word: str) -> int:
return sum(v * (i // 8) for i, (_, v) in enumerate(Counter(word).most_
common(), 8))
Counter(word): 取得每个字母的出现次数
most_common(n = int | None = None): 由大到小进行排序 没给 n 则回传所有内容
enumerate(iterable, start: int): 获得当前 index 与值 这边从 8 开始计算
v * (i // 8): v 为出现次数, i 为 index, i // 8 决定放在 one push or two pushes