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;
}
相关推荐
Tisfy17 天前
LeetCode 3838.带权单词映射:求和、取模、拼接(附python一行版)
python·算法·leetcode·字符串·题解·模拟·取模
Tisfy21 天前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
Tisfy1 个月前
LeetCode 3300.替换为数位和以后的最小元素:一次遍历
数学·算法·leetcode·模拟
Tisfy2 个月前
LeetCode 2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
java·数学·算法·leetcode·题解·模拟·取模
E等于MC平方2 个月前
AI 辅助物理课堂实验
人工智能·ai·大模型·模拟·物理·实验
Tisfy2 个月前
LeetCode 0796.旋转字符串:暴力模拟
算法·leetcode·题解·模拟·字符串匹配
Qres8212 个月前
Rabrg/artificial-life test
python·模拟
Tisfy2 个月前
LeetCode 0396.旋转函数:求diff
算法·leetcode·题解·模拟·增量法
Tisfy2 个月前
LeetCode 2833.距离原点最远的点:计数
算法·leetcode·字符串·题解·模拟·计数
浅念-2 个月前
LeetCode 模拟算法:用「还原过程」搞定编程题的入门钥匙
开发语言·c++·学习·算法·leetcode·职场和发展·模拟