题目:
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.
代码:
class Solution {
public:
vector<string> findWords(vector<string>& words) {
map<char, int> m;
vector<char> s1 = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'};
vector<char> s2 = {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'};
vector<char> s3 = {'z', 'x', 'c', 'v', 'b', 'n', 'm'};
for (auto c : s1)
m.insert(pair<char, int> (c, 1));
for (auto c : s2)
m.insert(pair<char, int> (c, 2));
for (auto c : s3)
m.insert(pair<char, int> (c, 3));
vector<string> result;
for (auto w : words){
bool b = 1; #判断是否在一行
char first = tolower(w[0]);
int i = m[first];
for (auto c : w ){
c = tolower(c);
int j = m[c];
if (j != i){
b = 0;
break;
}
}
if (b)
result.push_back(w);
}
return result;
}
};
别人的:
class Solution {
public:
vector<string> findWords(vector<string>& words) {
vector<string> ans;
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' };
for(string word:words){
int one = 0, two = 0, three = 0;
for(char c:word){
if(row1.count(c)) one = 1;
if(row2.count(c)) two = 1;
if(row3.count(c)) three = 1;
if(one+two+three > 1) break;
}
if(one + two + three == 1) ans.push_back(word);
}
return ans;
}
};
ASCII编码:http://www.doc88.com/p-951217962470.html