题目描述
如果单词列表(words)中的一个单词包含牌照(licensePlate)中所有的字母,那么我们称之为完整词。在所有完整词中,最短的单词我们称之为最短完整词。
单词在匹配牌照中的字母时不区分大小写,比如牌照中的 “P” 依然可以匹配单词中的 “p” 字母。
我们保证一定存在一个最短完整词。当有多个单词都符合最短完整词的匹配条件时取单词列表中最靠前的一个。
牌照中可能包含多个相同的字符,比如说:对于牌照 “PP”,单词 “pair” 无法匹配,但是 “supper” 可以匹配。
算法思路
虽然在题目里看不粗来,但是单词中包含所有牌照中的字母即可,不需要保证顺序。
class Solution(object):
def shortestCompletingWord(self, licensePlate, words):
# 用推导式提取拍照中的字命,并小写化
l=[i.lower() for i in licensePlate if i.isalpha()]
res=''
# 取最短完整词,所以需要遍历词典
for i in words:
co=i
for j in l:
if i.find(j)==-1:break
# 防止同一个字母倍复用
i=i.replace(j,'',1)
else:
if res:
# 对符合条件的词进行对比,如果更小,则更新
if len(co)<len(res):res=co
else:
res=co
return res