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沒有發生變化。