500 键盘行(枚举)

该博客介绍了一个LeetCode上的问题,即找出字符串数组中仅使用美式键盘同一行字母组成的单词。解决方案是通过创建一个哈希表来记录键盘上每行的字符,然后遍历单词,使用集合记录单词中字符所在的行。如果集合的长度为1,说明该单词所有字符都在同一行,将其添加到结果列表中。提供的代码实现了这一逻辑,并给出了示例测试用例。
摘要由CSDN通过智能技术生成

1. 问题描述:

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

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

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

示例 2:
输入:words = ["omk"]
输出:[]

示例 3:
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
提示:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row 

2. 思路分析:

分析题目可以知道我们考虑怎么样枚举即可,首先我们需要使用哈希表记录一下每一行的字符对应的行数,遍历所有的单词,使用set集合来记录当前单词中的字符在哈希表中出现的位置,最后判断set集合的长度是否是1即可,如果是1那么将当前单词加入到答案中即可。

3. 代码如下:

from typing import List


class Solution:
    def findWords(self, words: List[str]) -> List[str]:
        # 键盘中每一行对应的字符
        s = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
        dic = dict()
        # 使用字典记录下每个字符出现的行数
        for i in range(len(s)):
            for c in s[i]:
                dic[c] = i
        res = list()
        for w in words:
            t = set()
            for c in w:
                # set集合中添加当前单词出现的行数, lower将大写字母转化为小写字母
                t.add(dic[c.lower()])
            if len(t) == 1: res.append(w)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值