在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