""" 0500 - Keyboard Row """
#####################################################################################
# Imports
#####################################################################################
from typing import List
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def findWords(self, words: List[str]) -> List[str]:
"""Return words that can be typed using one keyboard row."""
rows = {
1: set("qwertyuiop"),
2: set("asdfghjkl"),
3: set("zxcvbnm"),
}
# Map letter -> row id for O(1) checks
letter_to_row = {}
for row_id, letters in rows.items():
for ch in letters:
letter_to_row[ch] = row_id
ans: List[str] = []
for word in words:
if not word:
continue
w = word.lower()
row = letter_to_row[w[0]]
if all(letter_to_row[ch] == row for ch in w):
ans.append(word)
return ans
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().findWords(["Hello", "Alaska", "Dad", "Peace"])) # ["Alaska", "Dad"]
print(Solution().findWords(["omk"])) # []
print(Solution().findWords(["adsdf", "sfd"])) # ["adsdf", "sfd"]
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()