3381. 手机键盘

3381. 手机键盘

⭐️难度:简单(其实较难)

⭐️类型:模拟

📖题目:题目链接

请你计算按照手机键盘(9键输入法)输入字母的方式,键入给定字符串(由小写字母构成)所花费的时间。

具体键入规则和花费时间如下描述:

对于同一键上的字符,例如 a,b,c

都在 "1" 键上,输入 a

只需要按一次,输入 c

需要连续按三次。

如果连续两个字符不在同一个按键上,则可直接按,如:

ad需要按两下,

kz需要按 6下。

如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如 ac,在按了 a之后,需要等一会儿才能按 c。

现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。

🌟思路:

用两个map,

第一个map记录每一个字母对应按几次,

第二个map记录每一个字母对应哪个按键。

📚题解:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<vector>  // vector不需要.h
#include<list>
#include<set>  // // 可以用 set 和 multiset
#include<unordered_set> // 可以用 unordered_set 和 unordered_multimap
#include<map>  // // 可以用 map 和 multimap
#include<unordered_map> // 可以用 unordered_map 和 unordered_multimap

using namespace std;

int main() {
    // 每个字母要用多少时间
    map<char, int> time = {
        {'a',1},{'b',2},{'c',3},
        {'d',1},{'e',2},{'f',3},
        {'g',1},{'h',2},{'i',3},
        {'j',1},{'k',2},{'l',3},
        {'m',1},{'n',2},{'o',3},
        {'p',1},{'q',2},{'r',3},{'s',4},
        {'t',1},{'u',2},{'v',3},
        {'w',1},{'x',2},{'y',3},{'z',4}
    };

    // 每个字母属于哪个按键
    map<char, int> key = {
        {'a',2},{'b',2},{'c',2},
        {'d',3},{'e',3},{'f',3},
        {'g',4},{'h',4},{'i',4},
        {'j',5},{'k',5},{'l',5},
        {'m',6},{'n',6},{'o',6},
        {'p',7},{'q',7},{'r',7},{'s',7},
        {'t',8},{'u',8},{'v',8},
        {'w',9},{'x',9},{'y',9},{'z',9}
    };

    char str[200];
    while (scanf("%s", str) != EOF) {
        char last = -1; // 上一次的按键,一开始是没有
        int count = 0;
        for (int i = 0;str[i] != '\0';i++) {
            // 看按键是否与上一次相等
            if (key[str[i]] == last) {
                count = count + 2;
            }
            count = count + time[str[i]];
            last = key[str[i]]; // 更新上一次按键
        }
        printf("%d\n", count);
    }

    return 0;
}
相关推荐
Tisfy6 小时前
LeetCode 3870.统计范围内的逗号:模拟 或 一步计算
数学·算法·leetcode·题解·模拟·遍历
Tisfy7 天前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
吞下星星的少年·-·10 天前
The 2025 ICPC Asia East Continent Online Contest (I) A题(模拟+贪心)
算法·贪心·模拟
謓泽14 天前
『51单片机』AD/DA
单片机·嵌入式硬件·51单片机·模拟·ad·da·謓泽
_Narcissus_18 天前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
Tisfy23 天前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口
OuO-223 天前
笔试强训 Day 44:最小差值、kotori 和素因子、dd 爱科学 1.0
二分查找·动态规划·贪心·模拟·记忆化搜索·递归·状态表示优化
gjjwh1 个月前
【2026年7月】 X-Plane12 v12.4.3-r1 和谐版完整版免费分享
模拟
Tisfy2 个月前
LeetCode 3867.数对的最大公约数之和:按题目说的做(gcd)
算法·leetcode·题解·模拟·最大公约数·gcd
Tisfy3 个月前
LeetCode 3838.带权单词映射:求和、取模、拼接(附python一行版)
python·算法·leetcode·字符串·题解·模拟·取模