一、题目:
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 .
二、解题
class Solution {
public :
vector <string > findWords(vector <string > & words) {
unordered_set <char > row1{ 'q' , 'w' , 'e' , 'r' , 't' , 'y' ,'u' , 'i' , 'o' , 'p' };
unordered_set <char > row2{ 'a' , 's' , 'd' , 'f' , 'g' , 'h' , 'j' , 'k' , 'l' };
unordered_set <char > row3{ 'z' , 'x' , 'c' , 'v' , 'b' ,'n' , 'm' };
vector <unordered_set <char > > rows{ row1, row2, row3 };
vector <string > validWords;
for (int i = 0 ; i<words.size(); ++i) {
int row = 0 ;
for (int k = 0 ; k<3 ; ++k) {
if (rows[k].count((char )tolower (words[i][0 ])) > 0 ) row = k;
}
for (int j = 0 ; j<words[i].size(); ++j) {
if (rows[row].count((char )tolower (words[i][j])) == 0 )
break ;
if (j == words[i].size() - 1 )
validWords.push_back(words[i]);
}
}
return validWords;
}
};