500.键盘行(简单、字符串)

本文介绍了一种高效的算法,用于从给定的单词列表中筛选出仅使用键盘同一行字母组成的单词。通过两次循环实现,分别检查每个单词是否完全由键盘的三行之一的字符构成。该算法在Python中实现,提供了两种不同的实现方式,均能在毫秒级时间内完成任务。

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

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

输入: [“Hello”, “Alaska”, “Dad”, “Peace”]
输出: [“Alaska”, “Dad”]

def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        s1=list('qwertyuiopQWERTYUIOP')
        s2=list('ASDFGHJKLasdfghjkl')
        s3=list('ZXCVBNMzxcvbnm')
        s=[]
        for i in words:
            a=b=c=0
            for j in set(i):
                a+=int(j in s1)
                b+=int(j in s2)
                c+=int(j in s3)
            if a==len(set(i)) or b==len(set(i)) or c==len(set(i)):
                s.append(i)
        return s

执行用时: 28 ms, 在Keyboard Row的Python提交中击败了43.84% 的用户

def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        line1="qwertyuiop"
        line2="asdfghjkl"
        line3="zxcvbnm"
        ans=[]
        for word in words:
            temp = word.lower()
            if (self.findWord(temp, line1)):
                ans.append(word)
            elif(self.findWord(temp,line2)):
                ans.append(word)
            elif(self.findWord( temp, line3)):
                ans.append(word)
        return ans  
    def findWord(self, word,base):
        for char in word:
            if char not in base:
                return False
        return True   

执行时用了20ms
两个其实差别不大,都用了两次循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值