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:
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.
思路:
这道题很简单,我们只需要使用map类型存放每个字母对应的键盘行数然后判断即可。
class Solution {
private:
map<char,int> letter_row;
void init(){
letter_row.insert({'q',0});
letter_row.insert({'w',0});
letter_row.insert({'e',0});
letter_row.insert({'r',0});
letter_row.insert({'t',0});
letter_row.insert({'y',0});
letter_row.insert({'u',0});
letter_row.insert({'i',0});
letter_row.insert({'o',0});
letter_row.insert({'p',0});
letter_row.insert({'a',1});
letter_row.insert({'s',1});
letter_row.insert({'d',1});
letter_row.insert({'f',1});
letter_row.insert({'g',1});
letter_row.insert({'h',1});
letter_row.insert({'j',1});
letter_row.insert({'k',1});
letter_row.insert({'l',1});
letter_row.insert({'z',2});
letter_row.insert({'x',2});
letter_row.insert({'c',2});
letter_row.insert({'v',2});
letter_row.insert({'b',2});
letter_row.insert({'n',2});
letter_row.insert({'m',2});
}
public:
vector<string> findWords(vector<string>& words) {
init();
vector<string> ans;
for(string w:words){
int flag = -1;
for(char c:w){
if(flag == -1) flag = letter_row[tolower(c)];
else if(flag != letter_row[tolower(c)]){
flag = -1;
break;
}
}
if(flag>=0) ans.push_back(w);
}
return ans;
}
};