leetcode_500 键盘行

809 阅读1分钟

要求

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中:

第一行由字符 "qwertyuiop" 组成。 第二行由字符 "asdfghjkl" 组成。 第三行由字符 "zxcvbnm" 组成。

image.png

示例 1:

输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]

示例 2:

输入:words = ["omk"]
输出:[]

示例 3:

输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]

核心代码

class Solution:
    def findWords(self, words: List[str]) -> List[str]:
        g1 = ["q","w","e","r","t","y","u","i","o","p"]
        g2 = ["a","s","d","f","g","h","j","k","l"]
        g3 = ["z","x","c","v","b","n","m"]
        res = list()
        for word in words:
            temp = word.lower()
            if temp[0] in g1:
                flag = 1
            elif temp[0] in g2:
                flag = 2
            elif temp[0] in g3:
                flag = 3
            temp = set(temp)
            for char in temp:
                if flag == 1 and char not in g1:
                    flag = 0
                    break
                if flag == 2 and char not in g2:
                    flag = 0
                    break
                if flag == 3 and char not in g3:
                    flag = 0
                    break
            if flag:
                res.append(word)
        return res

image.png

解题思路:简单的循环遍历,设置标志位,当不满足的时候我们的标志位也不会生效,就不会将数据添加到我们的最终结果中。