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.
import re
class Solution(object):
def __init__(self):
self.table1 = set('qwertyuiop')
self.table2 = set('asdfghjkl')
self.table3 = set('zxcvbnm')
def findWords(self, words):
"""
:type words: list[str]
:rtype: list[str]
"""
res = []
for i in words:
ilower = set(i.lower())
if ilower.issubset(self.table1):
res.append(i)
elif ilower.issubset(self.table2):
res.append(i)
elif ilower.issubset(self.table3):
res.append(i)
return res
class Solution2(object):
def findWords(self, words):
return filter(re.compile('(?i)([qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*)$').match, words)
class Solution3(object):
def findWords(self, words):
return [word for word in words if
any(set(word.lower()) <= set(row) for row in [set('qwertyuiop'), set('asdfghjkl'), set('zxcvbnm')])]
if __name__ == '__main__':
print Solution3().findWords(["Hello", "Alaska", "Dad", "Peace"])