题目链接
输入单词需要的最少按键次数 I
题目描述
注意点
- 1 <= word.length <= 26
- word 仅由小写英文字母组成
- word 中的所有字母互不相同
解答思路
- 因为word 中的所有字母互不相同,可以以任意8个字符为一组,第一组每个字符需要按键一次,第二组需要按键两次,以此类推…根据字符串长度将每组字符的按键次数累加起来
- 第二种解法是数学思路,根据字符串的长度n可以计算出每个按键至少分配的字符数量k = n / 8,一样每8个字符为一组,那么这8k个字符需要按键的次数为8 * (1 + 2 + … + k) = 4k * (k + 1),剩下n % 8个字符需要按键的次数为(k + 1)次,也就是(n % 8) * (k + 1),所以总按键次数就为4k * (k + 1) + (n % 8)(k + 1) = (4k + n % 8)(k + 1)
代码
方法一:
class Solution {
public int minimumPushes(String word) {
int n = word.length();
int res = 0;
int i = 1;
while (n / 8 != 0) {
res += 8 * i;
n -= 8;
i++;
}
res += (n % 8) * i;
return res;
}
}
方法二:
class Solution {
public int minimumPushes(String word) {
int n = word.length();
int k = n / 8;
return (k * 4 + n % 8) * (k + 1);
}
}
关键点
- word 中的所有字母互不相同,所以word的最大长度为26
- 推出数学公式的过程