在Python中查找包含确切k个不同单词的子列表的程序

在Python中查找包含确切k个不同单词的子列表的程序

假设我们有一个单词列表和另一个值k。我们必须找到给定单词中恰好包含k个不同单词的子列表的数量。

因此,如果输入如下words = [“Kolkata”, “Delhi”, “Delhi”, “Kolkata”] k = 2,那么输出将为5,因为以下子列表具有2个唯一单词:[“Kolkata”,“Delhi”],[“Delhi”,“Kolkata”],[“Kolkata”,“Delhi”,“Delhi”],[“Delhi”,“Delhi”,“Kolkata”],[“ Kolkata”,“Delhi”,“Delhi”,“Kolkata”],但不是[“ Delhi”,“Delhi”],因为只有一个唯一的单词。

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

  • 定义一个函数work()。这将取words,k
  • n := words的大小
  • 如果k与0相同,则
    • 返回0
  • cnt: =一个新映射
  • ans:= 0
  • l:= 0
  • 对于r在0到n的范围内,执行以下操作
    • word:= words[r]
    • 如果cnt中不存在word,则
      • cnt[word]:= 0
    • cnt[word]:= cnt[word] + 1
    • 当cnt的大小> k时,执行以下操作
      • cnt[words[l]]:= cnt[words[l]] – 1
      • 如果cnt[words[l]]与0相同,则
      • 从cnt中删除words[l]
      • l:= l + 1
    • ans:= ans + r – l + 1
  • 返回ans

从main方法返回(work(words, k) – work(words, k – 1))

更多Python相关文章,请阅读:Python 教程

示例(Python)

让我们查看以下实现以获得更好的理解−

class Solution:
   def solve(self, words, k):
      return self.work(words, k) - self.work(words, k - 1)
   def work(self, words, k):
      n = len(words)
      if k == 0:
         return 0
      cnt = dict()
      ans = 0
      l = 0
      for r in range(n):
         word = words[r]
         if word not in cnt:
            cnt[word] = 0
         cnt[word] += 1
         while len(cnt) > k:
            cnt[words[l]] -= 1
            if cnt[words[l]] == 0:
               del cnt[words[l]]
            l += 1
         ans += r - l + 1
      return ans
ob = Solution()
words = ["Kolkata", "Delhi", "Delhi", "Kolkata"]
k = 2
print(ob.solve(words, k))

输入

["Kolkata", "Delhi", "Delhi", "Kolkata"],2

输入

5

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程