Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2268.html
2268. Minimum Number of Keypresses
Description
You have a keypad with 9
buttons, numbered from 1
to 9
, each mapped to lowercase English letters. You can choose which characters each button is matched to as long as:
- All 26 lowercase English letters are mapped to.
- Each character is mapped to by exactly
1
button. - Each button maps to at most
3
characters.
To type the first character matched to a button, you press the button once. To type the second character, you press the button twice, and so on.
Given a string s
, return the minimum number of keypresses needed to type s
using your keypad.
Note that the characters mapped to by each button, and the order they are mapped in cannot be changed.
Example 1:
Input: s = "apple" Output: 5 Explanation: One optimal way to setup your keypad is shown above. Type 'a' by pressing button 1 once. Type 'p' by pressing button 6 once. Type 'p' by pressing button 6 once. Type 'l' by pressing button 5 once. Type 'e' by pressing button 3 once. A total of 5 button presses are needed, so return 5.
Example 2:
Input: s = "abcdefghijkl" Output: 15 Explanation: One optimal way to setup your keypad is shown above. The letters 'a' to 'i' can each be typed by pressing a button once. Type 'j' by pressing button 1 twice. Type 'k' by pressing button 2 twice. Type 'l' by pressing button 3 twice. A total of 15 button presses are needed, so return 15.
Constraints:
1 <= s.length <= 105
s
consists of lowercase English letters.
Solutions
-
class Solution { public int minimumKeypresses(String s) { int[] cnt = new int[26]; for (char c : s.toCharArray()) { ++cnt[c - 'a']; } Arrays.sort(cnt); int ans = 0; for (int i = 1, j = 1; i <= 26; ++i) { ans += j * cnt[26 - i]; if (i % 9 == 0) { ++j; } } return ans; } }
-
class Solution { public: int minimumKeypresses(string s) { vector<int> cnt(26); for (char& c : s) ++cnt[c - 'a']; sort(cnt.begin(), cnt.end()); int ans = 0; for (int i = 1, j = 1; i <= 26; ++i) { ans += j * cnt[26 - i]; if (i % 9 == 0) ++j; } return ans; } };
-
class Solution: def minimumKeypresses(self, s: str) -> int: cnt = Counter(s) ans = 0 i, j = 0, 1 for v in sorted(cnt.values(), reverse=True): i += 1 ans += j * v if i % 9 == 0: j += 1 return ans
-
func minimumKeypresses(s string) int { cnt := make([]int, 26) for _, c := range s { cnt[c-'a']++ } sort.Ints(cnt) ans := 0 for i, j := 1, 1; i <= 26; i++ { ans += j * cnt[26-i] if i%9 == 0 { j++ } } return ans }