Python中最短的完成词

假设我们有一个词典单词,并且必须从给定的词典单词中找到最小长度的单词,它具有字符串licensePlate中的所有字母。现在,这样的单词据说可以完成给定的字符串licensePlate。在这里,我们将忽略字母的大小写。并且保证答案存在。如果答案不只一个,则返回数组中最先出现的答案。

车牌上可能会出现多次相同的字母。因此,当licensePlate为“ PP”时,单词“ pile”不会完成licensePlate,而单词“ topper”会完成。

因此,如果输入类似于licensePlate =“ 1s3 PSt”,单词= [“ step”,“ steps”,“ stripe”,“ stepple”],则输出将为“ steps”,因为它是包含字母是“ S”,“ P”,“ S”,“ T”。

为了解决这个问题,我们将遵循以下步骤-

  • 字母:=“ abcdefghijklmnopqrstuvwxyz”

  • 字母:=当s为字母时,通过从licensePlate中获取所有s来以小写形式列出s

  • valid_words:=一个新列表

  • 对于每个我说的话

    • 在valid_words的末尾插入i

    • append:= append and(字母中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