解题报告Leecode 500. 键盘行——Leecode每日一题系列

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解题报告Leecode 500. 键盘行——Leecode每日一题系列相关的知识,希望对你有一定的参考价值。

今天是坚持每日一题打卡第七天


题目描述

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:

第一行由字符 “qwertyuiop” 组成。
第二行由字符 “asdfghjkl” 组成。
第三行由字符 “zxcvbnm” 组成。

示例 1:
输入:words = [“Hello”,“Alaska”,“Dad”,“Peace”]
输出:[“Alaska”,“Dad”]

示例 2:
输入:words = [“omk”]
输出:[]

示例 3:
输入:words = [“adsdf”,“sfd”]
输出:[“adsdf”,“sfd”]

提示:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成


核心思路:哈希表打表映射,一一匹配即可。

耗时:0ms

class Solution {
public:
    vector<string> findWords(vector<string>& words) {
        vector<string>res;
        unordered_map<char, int>um[3];
        um[0]['q'] = um[0]['w'] = um[0]['e'] = um[0]['r'] = um[0]['t'] = um[0]['y'] = um[0]['u'] = um[0]['i'] = um[0]['o'] = um[0]['p'] = 1;
        um[1]['a'] = um[1]['s'] = um[1]['d'] = um[1]['f'] = um[1]['g'] = um[1]['h'] = um[1]['j'] = um[1]['k'] = um[1]['l'] = 1;
        um[2]['z'] = um[2]['x'] = um[2]['c'] = um[2]['v'] = um[2]['b'] = um[2]['n'] = um[2]['m'] = 1;

        for(auto s : words) {
            int t = 0;
            if(um[0][tolower(s[0])] == 1) t = 0;
            else if(um[1][tolower(s[0])] == 1) t = 1;
            else if(um[2][tolower(s[0])] == 1) t = 2;

            for(auto i : s) {
                if(um[t][tolower(i)] == 0) goto loop;
            }
            res.push_back(s);
            loop:;
        }
        return res;
    }
};

零星的变好,最后也会如星河般闪耀

以上是关于解题报告Leecode 500. 键盘行——Leecode每日一题系列的主要内容,如果未能解决你的问题,请参考以下文章

解题报告Leecode 35. 搜索插入位置——Leecode刷题系列

解题报告Leecode. 575. 分糖果——Leecode每日一题系列

解题报告Leecode911. 在线选举——Leecode每日一题系列

解题报告Leecode911. 在线选举——Leecode每日一题系列

解题报告Leecode 384. 打乱数组——Leecode每日一题系列

解题报告Leecode 519. 随机翻转矩阵——Leecode每日一题系列