如果單詞列表(words)中的乙個單詞包含牌照(licenseplate)中所有的字母,那麼我們稱之為完整詞。在所有完整詞中,最短的單詞我們稱之為最短完整詞。
單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 "p" 依然可以匹配單詞中的 "p" 字母。
我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短完整詞的匹配條件時取單詞列表中最靠前的乙個。
牌照中可能包含多個相同的字元,比如說:對於牌照 "pp",單詞 "pair" 無法匹配,但是 "supper" 可以匹配。
示例 1:
輸入:licenseplate = "1s3 pst", words = ["step", "steps", "stripe", "stepple"]
輸出:"steps"
說明:最短完整詞應該包括 "s"、"p"、"s" 以及 "t"。對於 "step" 它只包含乙個 "s" 所以它不符合條件。同時在匹配過程中我們忽略牌照中的大小寫。
示例 2:
輸入:licenseplate = "1s3 456", words = ["looks", "pest", "stew", "show"]
輸出:"pest"
說明:存在 3 個包含字母 "s" 且有著最短長度的完整詞,但我們返回最先出現的完整詞。
注意:牌照(licenseplate)的長度在區域[1, 7]中。
牌照(licenseplate)將會包含數字、空格、或者字母(大寫和小寫)。
單詞列表(words)長度在區間 [10, 1000] 中。
每乙個單詞 words[i] 都是小寫,並且長度在區間 [1, 15] 中。
classsolution:
def shortestcompletingword(self, licenseplate: str, words: list[str]) ->str:
letters=
for i in
licenseplate:
ifi.isalpha():
defcheck(word):
if len(word)>=len(letters):
flag=true
for i in
set(letters):
if i not
in word or letters.count(i)>word.count(i):
flag=false
break
return
flag
min_length=15macth=
for word in
words:
ifcheck(word):
min_length=min(min_length,len(word))
for word in
macth:
if len(word)==min_length:
return
word
優化==>
classsolution:
def shortestcompletingword(self, licenseplate: str, words: list[str]) ->str:
letters=
for i in
licenseplate:
ifi.isalpha():
words=sorted(words,key = lambda
x:len(x))
words=filter(lambda x:len(x)>=len(letters),words)
for i in
words:
word=list(i)
for j in
letters:
if j in
word:
word.remove(j)
else
:
break
else
:
return i
LeetCoda 748 最短完整詞
單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 p 依然可以匹配單詞中的 p 字母。我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短完整詞的匹配條件時取單詞列表中最靠前的乙個。牌照中可能包含多個相同的字元,比如說 對於牌照 pp 單詞 pair 無法匹配,但是 supper 可以匹配。示例...
Leetcode 748 最短完整詞
如果單詞列表 words 中的乙個單詞包含牌照 licenseplate 中所有的字母,那麼我們稱之為完整詞。在所有完整詞中,最短的單詞我們稱之為最短完整詞。單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 p 依然可以匹配單詞中的 p 字母。我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短...
LeetCode 748 最短完整詞
如果單詞列表 words 中的乙個單詞包含牌照 licenseplate 中所有的字母,那麼我們稱之為完整詞。在所有完整詞中,最短的單詞我們稱之為最短完整詞。單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 p 依然可以匹配單詞中的 p 字母。我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短...