Leetcode- 500. 键盘行

本文介绍了一种算法,用于从给定的单词列表中筛选出仅使用键盘同一行字母组成的单词。通过建立与键盘布局相对应的数据结构,并利用字符串转换与比较的方法实现筛选逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

American keyboard

示例1:

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

注意:

  1. 你可以重复使用键盘上同一字符。
  2. 你可以假设输入的字符串将只包含字母。

思路:

 1.建立和键盘对应的三个list和一个返回List

        a=['q','w','e','r','t','y','u','i','o','p']
        b=['a','s','d','f','g','h','j','k','l']
        c=['z','x','c','v','b','n','m']

        e=['']

 2.列表中的字符串包括了大写和小写字母,这里将其全部转化为小写。同时因为最后输出的为原列表中满足要求的字符串,因此需要使用循环重新复制一个原列表。(这里不能使用列表 a=words ,这样a同样指向words的内存空间,修改words同样会导致a的变化)

 3.判断a中的每项字符串首字母属于哪个list,如属于a则继续判断该字符串的下一个字母是否在a中,不在break,判断下一个字符串。若全部在一个list中,当循环到该字符串最后一个字母时,将该字符串的所属列表的位置i赋给words[](原列表)添加在e中

4.返回e,由于e的首项为"",因此返回e[1:](切片)

code:

class Solution(object):
    def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        a=['q','w','e','r','t','y','u','i','o','p']
        b=['a','s','d','f','g','h','j','k','l']
        c=['z','x','c','v','b','n','m']
        d=['']*len(words)
        e=['']
        for i in range(0,len(words)):
            d[i]=words[i]
            
        for i in range(0,len(d)):
            d[i]=d[i].lower()
            o=int(len(d[i]))
            if d[i][0] in a:
                for j in range(0,o):
                    if d[i][j] not in a:
                        break
                    if j==o-1:
                        e.append(words[i])
                        
            elif d[i][0] in b:
                for j in range(0,o):
                    if d[i][j] not in b:
                        break
                    if j==o-1:
                        e.append(words[i])
                        
            elif d[i][0] in c:
                for j in range(0,o):
                    if d[i][j] not in c:
                        break
                    if j==o-1:
                        e.append(words[i])
        return e[1:]
            
            
        

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值