在Python中查找单词数组中最长前缀序列的长度

在Python中查找单词数组中最长前缀序列的长度

假设我们有一个名为w的单词列表,其中含有小写字符串。我们必须找到w中最长序列的长度,其中每个前一个单词都是下一个单词的前缀,并且下一个单词仅附加了一个新字符。

因此,如果输入类似于w = [“pqr”, “pq”, “m”, “mn”, “pqrs”],那么输出将为3,因为我们可以获得序列:[“pq”, “pqr”, “pqrs”],其长度为3。

要解决此问题,我们将按照以下步骤进行−

  • 对列表w进行排序
  • dp:一个映射,其中键的默认值为0
  • res:0
  • 对于w中的每个单词,执行以下操作
    • dp[word]:= dp[word的子字串,直到倒数第二个元素] + 1
    • res:= res和dp[word]的最大值
  • 返回res

示例

让我们看看下面的实现以更好地了解−

from collections import defaultdict
def solve(w):
   w.sort()
   dp = defaultdict(int)
   res = 0
   for word in w:
      dp[word] = dp[word[:-1]] + 1
      res = max(res, dp[word])
   return res

w = ["pqr", "pq", "m", "mn", "pqrs"]
print(solve(w))

输入

["pqr", "pq", "m", "mn", "pqrs"]

输出

3

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程