【每日一题】【LeetCode】【第二十七天】【Python】键盘行

解决之路= =

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

没有想到有什么方便的方法,老老实实循环写吧。

循环判断每个词,然后先用词的第一个字确定所处哪个行,在用这个行进行循环判断,只要每个字都在该行,就可以加入到结果列表中,最后循环都结束过后,返回结果列表即可。

class Solution(object):
    def getLine(self, key):
        """ 确定行 """
        lines = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
        for line in lines:
            if key.lower() in line:
                return line
        return None
    def findWords(self, words):
    	# 结果列表
        res = []
        for word in words:
            # 确定行
            the_line = self.getLine(word[0])
            # 标识
            flag = 0
            # 判断单词word是否所有字都处于一行
            for i in word[1:]:
                if i not in the_line:
                    flag = 1
            # 标识正确就表示都处于一行,加入结果列表中
            if flag == 0:
                res.append(word)
        return res

测试正确,但提交错误。

在这里插入图片描述

第二次

原因就是大小写的问题,看测试案例,以为只会首字母大写和全小写,原来中间也会有大写。

中间判断的时候处理一下即可。

class Solution(object):
    def getLine(self, key):
        """ 确定行 """
        lines = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
        for line in lines:
            if key.lower() in line:
                return line
        return None
    def findWords(self, words):
        res = []
        for word in words:
            the_line = self.getLine(word[0])
            the_word = word.lower()
            flag = 0
            for i in the_word:
                if i not in the_line:
                    flag = 1
            if flag == 0:
                res.append(word)
        return res

测试正确,提交成功。耗时方面也很快,合格了。

在这里插入图片描述

第三次(集合方法)

在评论区也学到了集合的方法。创建三行字母的集合,然后把单词放到集合里,接着判断是否是子集关系,就可以判断单词中的字母是否都在一行了。

class Solution(object):
    def findWords(self, words):
        set1 = set('qwertyuiop')
        set2 = set('asdfghjkl')
        set3 = set('zxcvbnm')
        res = []
        for i in words:
            x = i.lower()
            setx = set(x)
            if setx<=set1 or setx<=set2 or setx<=set3:
                res.append(i)
        return res

不过,效率和自己写的差不多。。。没有很多提高

在这里插入图片描述

杂谈

周末不写中等题了,有的简单题也挺难的,最近卡了一个简单题,在学怎么用动态规划做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值