[Leetcode] 500. Keyboard Row 解题报告

来源:互联网 发布:云图制作软件 编辑:程序博客网 时间:2024/06/05 06:39

题目

Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.


American keyboard


Example 1:

Input: ["Hello", "Alaska", "Dad", "Peace"]Output: ["Alaska", "Dad"]

Note:

  1. You may use one character in the keyboard more than once.
  2. You may assume the input string will only contain letters of alphabet.

思路

我们可以用一个长度为26的向量来模拟哈希表:每个小写字母对应其在美式键盘上的行编号。然后对于每个单词,统计每个字符出现的行编号集合。如果最终行编号集合的大小为1,那么就符合条件,加入结果集中。

代码

class Solution {public:    vector<string> findWords(vector<string>& words) {        set<int> lines;        vector<string> ret;        vector<int> hash = {2, 3, 3, 2, 1, 2, 2, 2, 1, 2, 2, 2, 3, 3, 1, 1, 1, 1, 2, 1, 1, 3, 1, 3, 1, 3};        for (auto s : words) {            lines.clear();            for (auto c : s) {                lines.insert(hash[tolower(c) - 'a']);            }            if (lines.size() == 1) {                ret.push_back(s);            }        }        return ret;    }};

原创粉丝点击