当前位置: 面试刷题>> 最少按键次数 (经典算法题500道)


题目描述补充

在智能手机或计算机键盘上,有些字符可以通过单次按键直接输入,而有些特殊字符或组合(如标点符号、特殊符号、大写字母等)可能需要多次按键(例如,Shift + 字符键,或长按某个键后从弹出的菜单中选择)。现在,给定一个字符串,其中包含小写字母、大写字母和一些标点符号,我们需要编写一个程序来计算并返回输入这个字符串所需的最少按键次数。

假设条件

  1. 所有的小写字母均可以通过单次按键输入。
  2. 大写字母需要按下Shift键和相应的小写字母键(共计两次按键)。
  3. 标点符号和其他特殊字符的输入方式因键盘而异,但这里我们简化为每种特殊字符都需要额外的按键操作(比如,按下Shift和特殊字符键,或直接从特殊字符菜单选择,这里统一视为额外一次按键),因此除了大小写字母外,其他所有字符均视为需要额外一次按键。

示例输入

"Hello, World!"

示例输出

13

解释:'H'和'W'是大写字母,各需2次按键;其余字符均为小写或标点符号,各需1次按键。因此,总共需要13次按键。

PHP 示例代码

function minKeyPresses($s) {
    $count = 0;
    for ($i = 0; $i < strlen($s); $i++) {
        if (ctype_upper($s[$i])) { // 检查大写字母
            $count += 2;
        } elseif (!ctype_alpha($s[$i])) { // 检查非字母字符
            $count++;
        }
        // 小写字母不需要额外按键,所以不加
    }
    return $count + strlen($s); // 加上所有小写字母的按键次数(即字符串长度)
}

echo minKeyPresses("Hello, World!"); // 输出 13

Python 示例代码

def min_key_presses(s):
    count = 0
    for char in s:
        if char.isupper():
            count += 2
        elif not char.isalpha():
            count += 1
    # 加上所有字符的基础按键次数(小写字母也算一次)
    return count + len(s)

print(min_key_presses("Hello, World!")) # 输出 13

JavaScript 示例代码

function minKeyPresses(s) {
    let count = 0;
    for (let i = 0; i < s.length; i++) {
        if (s[i] === s[i].toUpperCase()) { // 检查大写字母
            count += 2;
        } else if (!/[a-z]/.test(s[i])) { // 检查非字母字符
            count++;
        }
        // 小写字母不需要额外按键,所以不加
    }
    return count + s.length; // 加上所有小写字母的按键次数(即字符串长度)
}

console.log(minKeyPresses("Hello, World!")); // 输出 13

码小课网站中有更多相关内容分享给大家学习,希望这些示例能帮助你在面试中表现出色!

推荐面试题