题目描述:
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例:
输入: [“Hello”, “Alaska”, “Dad”, “Peace”]
输出: [“Alaska”, “Dad”]
注意:
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母
方法1:
主要思路:
(1)直观的想,就是将每行的字符映射成同一个数字,对应同一个单词,只有各个字符都映射到同一个数字时,才能够说明这个单词满足要求;
class Solution {
public:
vector<string> findWords(vector<string>& words) {
//建立每行字符的映射
unordered_map<char,int> mp;
mp['q']=1;mp['Q']=1;
mp['w']=1;mp['W']=1;
mp['e']=1;mp['E']=1;
mp['r']=1;mp['R']=1;
mp['t']=1;mp['T']=1;
mp['y']=1;mp['Y']=1;
mp['u']=1;mp['U']=1;
mp['i']=1;mp['I']=1;
mp['o']=1;mp['O']=1;
mp['p']=1;mp['P']=1;
mp['a']=2;mp['A']=2;
mp['s']=2;mp['S']=2;
mp['d']=2;mp['D']=2;
mp['f']=2;mp['F']=2;
mp['g']=2;mp['G']=2;
mp['h']=2;mp['H']=2;
mp['j']=2;mp['J']=2;
mp['k']=2;mp['K']=2;
mp['l']=2;mp['L']=2;
mp['z']=3;mp['Z']=3;
mp['x']=3;mp['X']=3;
mp['c']=3;mp['C']=3;
mp['v']=3;mp['V']=3;
mp['b']=3;mp['B']=3;
mp['n']=3;mp['N']=3;
mp['m']=3;mp['M']=3;
vector<string> res;
//判断每个单词的字符映射
for(int i=0;i<words.size();++i){
int tmp=mp[words[i][0]];
int j=0;
for(;j<words[i].size();++j){
if(mp[words[i][j]]!=tmp){
break;
}
}
//若满足要求
if(j==words[i].size()){
res.push_back(words[i]);
}
}
return res;
}
};