Given an array of strings words
, return the words that can be typed using letters of the alphabet on only one row of American keyboard like the image below.
In the American keyboard:
- the first row consists of the characters
"qwertyuiop"
, - the second row consists of the characters
"asdfghjkl"
, and - the third row consists of the characters
"zxcvbnm"
.
Example 1:
Input: words = ["Hello","Alaska","Dad","Peace"] Output: ["Alaska","Dad"]
Example 2:
Input: words = ["omk"] Output: []
Example 3:
Input: words = ["adsdf","sfd"] Output: ["adsdf","sfd"]
Constraints:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i]
consists of English letters (both lowercase and uppercase).
class Solution:
def findWords(self, words: List[str]) -> List[str]:
s1 = set('qwertyuiop')
s2 = set('asdfghjkl')
s3 = set('zxcvbnm')
res = []
for word in words:
t = set(word.lower())
if t <= s1 or t <= s2 or t <= s3:
res.append(word)
return res
class Solution {
public String[] findWords(String[] words) {
String s1 = "qwertyuiopQWERTYUIOP";
String s2 = "asdfghjklASDFGHJKL";
String s3 = "zxcvbnmZXCVBNM";
List<String> res = new ArrayList<>();
for (String word : words) {
int n1 = 0, n2 = 0, n3 = 0;
int n = word.length();
for (int i = 0; i < n; ++i) {
if (s1.contains(String.valueOf(word.charAt(i)))) {
++n1;
} else if (s2.contains(String.valueOf(word.charAt(i)))) {
++n2;
} else {
++n3;
}
}
if (n1 == n || n2 == n || n3 == n) {
res.add(word);
}
}
return res.toArray(new String[0]);
}
}
class Solution {
public String[] findWords(String[] words) {
String s = "12210111011122000010020202";
List<String> res = new ArrayList<>();
for (String word : words) {
Set<Character> t = new HashSet<>();
for (char c : word.toLowerCase().toCharArray()) {
t.add(s.charAt(c - 'a'));
}
if (t.size() == 1) {
res.add(word);
}
}
return res.toArray(new String[0]);
}
}
class Solution {
public:
vector<string> findWords(vector<string>& words) {
string s = "12210111011122000010020202";
vector<string> ans;
for (auto& word : words)
{
unordered_set<char> t;
for (char c : word) t.insert(s[tolower(c) - 'a']);
if (t.size() == 1) ans.push_back(word);
}
return ans;
}
};
func findWords(words []string) []string {
s := "12210111011122000010020202"
var ans []string
for _, word := range words {
t := make(map[byte]bool)
for _, c := range word {
t[s[unicode.ToLower(c)-'a']] = true
}
if len(t) == 1 {
ans = append(ans, word)
}
}
return ans
}