Keyboard Row
题目
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) {
vector<string> result;
char r1[] = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'};
char r2[] = {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'};
char r3[] = {'z', 'x', 'c', 'v', 'b', 'n', 'm'};
// 分别用set来存储对应的字符,方便判断字符对应的位置
set<char> up(r1, r1 + 10);
set<char> mid(r2, r2 + 9);
set<char> down(r3, r3 + 7);
int u, m, d;
for (int i = 0; i < words.size(); i++) {
u = 0;
m = 0;
d = 0;
for (int j = 0; j < words[i].length(); j++) {
// 判断字符是否在第一行
if (up.count(words[i][j]) == 1) u = 1;
// 判断字符是否在第二行
if (mid.count(words[i][j]) == 1) m = 1;
// 判断字符是否在第三行
if (down.count(words[i][j]) == 1) d = 1;
// 判断字符串中的字符是否由同一行的字符组成
if (u + m + d > 1) break;
}
// 将满足条件的字符串记录下来
if (u + m + d == 1) result.push_back(words[i]);
}
return result;
}
};