class Solution {
public:
vector<string> findWords(vector<string>& words) {
unordered_set<char> set1 = {'q','w','e','r','t','y','u','i','o','p'};
unordered_set<char> set2 = {'s','d','f','g','h','j','k','l','a'};
unordered_set<char> set3 = {'z','x','c','v','b','n','m'};
vector<unordered_set<char>> sets = {set1, set2, set3};
vector<string> result;
for (int i = 0; i < words.size(); i++){
string lower = words[i];
transform(lower.begin(),lower.end(),lower.begin(), ::tolower);
int index = 0;
if (set1.find(lower[0]) != set1.end()) {
index = 0;
} else if (set2.find(lower[0]) != set2.end()) {
index = 1;
} else if (set3.find(lower[0]) != set3.end()) {
index = 2;
}
unordered_set<char> tmpStr = sets[index];
int flag = 0;
for(char c: lower) {
if (tmpStr.find(c) == tmpStr.end()) {
flag = 1;
break;
}
}
if (!flag) {
result.push_back(words[i]);
}
}
return result;
}
};