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]);
}
}