Python中最短的完成词
假设我们有一个词典单词,并且必须从给定的词典单词中找到最小长度的单词,它具有字符串licensePlate中的所有字母。现在,这样的单词据说可以完成给定的字符串licensePlate。在这里,我们将忽略字母的大小写。并且保证答案存在。如果答案不只一个,则返回数组中最先出现的答案。
车牌上可能会出现多次相同的字母。因此,当licensePlate为“PP”时,单词“pile”不会完成licensePlate,而单词“topper”会完成。
因此,如果输入类似于licensePlate=“1s3PSt”,单词=[“step”,“steps”,“stripe”,“stepple”],则输出将为“steps”,因为它是包含字母是“S”,“P”,“S”,“T”。
为了解决这个问题,我们将遵循以下步骤-
字母:=“abcdefghijklmnopqrstuvwxyz”
字母:=当s为字母时,通过从licensePlate中获取所有s来以小写形式列出s
valid_words:=一个新列表
对于每个我说的话
在valid_words的末尾插入i
append:=appendand(字母中j的数量<=i中j的数量)
附加:=真
对于字母中的每个j,
如果append为true,则
返回valid_words中的最小长度的单词
让我们看下面的实现以更好地理解-
示例
class Solution: def shortestCompletingWord(self, licensePlate, words): alphabet = "abcdefghijklmnopqrstuvwxyz" letters = [s.lower() for s in licensePlate if s.lower() in alphabet] valid_words = [] for i in words: append = True for j in letters: append = append and (letters.count(j) <= i.count(j)) if append: valid_words.append(i) return min(valid_words, key=len) ob = Solution()print(ob.shortestCompletingWord("1s3 PSt", ["step", "steps", "stripe", "stepple"]))
输入值
"1s3 PSt", ["step", "steps", "stripe", "stepple"]
输出结果
steps