题目:
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.
Example 1:
Input: ["Hello", "Alaska", "Dad", "Peace"] Output: ["Alaska", "Dad"]
Note:
- You may use one character in the keyboard more than once.
- 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;
}
};