單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的"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" 且有著最短長度的完整詞,但我們返回最先出現的完整詞方法一:簡單暴力的解決方法:遍歷個字元匹配
耗時大
class solution:
def shortestcompletingword(self, licenseplate: str, words: list[str]) -> str:
licen =
licenseplate = licenseplate.lower()
for i in list(licenseplate):
if i.isalpha():
li = ''
for word in words:
count = 0
w = list(word)
for i in licen:
if i.isalpha():
if i in w:
w.remove(i)
count += 1
else:
break
if count == len(licen):
if li == '':
li = word
else:
if len(li) > len(word):
li = word
return li
方法二:統計字元出現的頻率,判斷乙個字典是否為另乙個字典的子集
class solution:
def shortestcompletingword(self, licenseplate: str, words: list[str]) -> str:
licenseplate = licenseplate.lower()
#統計字元出現的頻率
count = {}
for i in list(licenseplate):
if i.isalpha():
if i in count:
count[i] += 1
else:
count[i] = 1
word_result = "2"*1000
for word in words:
word_count = {}
for i in list(word):
if i in word_count:
word_count[i] += 1
else:
word_count[i] = 1
sign = true
for key, values in count.items():
if key not in word_count or word_count[key] < values:
sign = false
break
if sign:
if len(word) < len(word_result):
word_result = word
return word_result
748 最短完整詞
如果單詞列表 words 中的乙個單詞包含牌照 licenseplate 中所有的字母,那麼我們稱之為完整詞。在所有完整詞中,最短的單詞我們稱之為最短完整詞。單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 p 依然可以匹配單詞中的 p 字母。我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短...
Leetcode 748 最短完整詞
如果單詞列表 words 中的乙個單詞包含牌照 licenseplate 中所有的字母,那麼我們稱之為完整詞。在所有完整詞中,最短的單詞我們稱之為最短完整詞。單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 p 依然可以匹配單詞中的 p 字母。我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短...
LeetCode 748 最短完整詞
如果單詞列表 words 中的乙個單詞包含牌照 licenseplate 中所有的字母,那麼我們稱之為完整詞。在所有完整詞中,最短的單詞我們稱之為最短完整詞。單詞在匹配牌照中的字母時不區分大小寫,比如牌照中的 p 依然可以匹配單詞中的 p 字母。我們保證一定存在乙個最短完整詞。當有多個單詞都符合最短...