[leetcode 500]键盘行
1.题目描述
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意:
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。
code:
class Solution(object):
def findWords(self, words):
"""
:type words: List[str]
:rtype: List[str]
"""
L1=['Q','q','W','w','E','e','R','r','T','t','Y','U','u','y','I','i','O','o','P','p']
L2=['A','a','S','s','D','d','F','f','G','g','H','h','J','j','K','k','L','l']
L3=['Z','z','X','x','C','c','V','v','B','b','N','n','M','m']
L=[]
for x in words[:]:
flag1=0
flag2=0
flag3=0
for y in x:
if y in L1:
flag1=1
if y in L2:
flag2=1
if y in L3:
flag3=1
if (flag1+flag2+flag3)!=1:
words.remove(x)
return words
贴这道题的原因:
我之前犯过很多次这种错误,对于list进行元素删除的时候,使用pop或者remove,del 都会遇到IndexError: list index out of range.
因为删除元素之后,list会变短,然后按照原来的下标进行访问就会导致越界。因此,有两种解决办法:1是倒序遍历range(len(nums)-1,-1,-1) 从后面开始删,list在变短,我们访问的下标也在变小。2.遍历一个不变的list,即原来目标的拷贝nums[:]。这样我们就不存在越界的问题,因为我们遍历的list没有发生变化。