题目描述:
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个字母在键盘中只占三行,那么可以用哈希表构建字母和行数的对应关系,然后所有字母的行数都一致的单词就满足题目要求。
class Solution {
public:
vector<string> findWords(vector<string>& words) {
string s1="qwertyuiop";
string s2="asdfghjkl";
string s3="zxcvbnm";
unordered_map<char,int> hash;
for(int i=0;i<s1.size();i++) hash[s1[i]]=1,hash[toupper(s1[i])]=1;
for(int i=0;i<s2.size();i++) hash[s2[i]]=2,hash[toupper(s2[i])]=2;
for(int i=0;i<s3.size();i++) hash[s3[i]]=3,hash[toupper(s3[i])]=3;
vector<string> result;
for(int i=0;i<words.size();i++)
{
bool flag=true;
for(int j=1;j<words[i].size();j++)
{
if(hash[words[i][j]]!=hash[words[i][j-1]])
{
flag=false;
break;
}
}
if(flag) result.push_back(words[i]);
}
return result;
}
};