在Python中找到可以由给定字母组成的最长单词的长度

在Python中找到可以由给定字母组成的最长单词的长度

假设我们有一个单词列表和一个名为letters的字符串,我们必须找到可以通过重新排列给定字母而制作的最长单词的大小。 在字母中可能有星号字符(*),它可以匹配任何字符。 不必使用所有字母。

因此,如果输入如下:words = [“prince”, “rice”, “price”, “limit”, “hello”] letters = “*r**ce*”,则输出将是6,因为我们可以制作的最长单词是”prince”,它的长度为6。

要解决这个问题,我们将遵循以下步骤:

  • has := 包含字母和每个元素在letters中频率的映射
  • 定义一个名为valid()的函数。这将接受s
  • need := 包含字母和每个元素在s中频率的映射
  • extra := need中(对于需要的所有字符,最大值为0和need [char] – has [ char ])的所有元素之和
  • 当extra <= has [“*”]时返回true
  • 从主方法中执行以下操作:
  • 当单词为valid时,返回列表[所有单词的大小]中的最大元素

让我们看看以下实现以更好地理解:

示例

from collections import Counter

class Solution:
   def solve(self, words, letters):
      has = Counter(letters)

      def valid(s):
         need = Counter(s)
         extra = sum([max(0, need[char] - has[char]) for char in need])
         return extra <= has["*"]

      return max([len(word) for word in words if valid(word)])

ob = Solution()
words = ["prince", "rice", "price", "limit", "hello"]
letters = "*r**ce*"
print(ob.solve(words, letters))

输入

["prince", "rice", "price", "limit", "hello"], "*r**ce*"

输出

6

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程