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;
}
相关推荐
码农幻想梦1 天前
KY110 日期差值
模拟
码农幻想梦2 天前
3426. 糖果分享游戏
模拟
码农幻想梦4 天前
KY24 剩下的树
模拟
ygklwyf4 天前
JPRS编程竞赛2026#1(AtCoder初学者竞赛442)
c++·算法·模拟
码农幻想梦6 天前
KY221 打印日期
开发语言·模拟
码农幻想梦6 天前
KY257 日期累加
模拟
Tisfy7 天前
LeetCode 3507.移除最小数对使数组有序 I:纯模拟
算法·leetcode·题解·模拟·数组
码农幻想梦7 天前
KY18 今年的第几天?
模拟
码农幻想梦8 天前
杭电-叠筐问题
模拟