假设我们有一个单词列表和另一个值k。我们必须找到给定单词中的子列表的数量,以便有k个完全不同的单词。
因此,如果输入像单词= [“ Kolkata”,“ Delhi”,“ Delhi”,“ Kolkata”] k = 2,则输出将为5,因为以下子列表具有2个唯一的单词:[“ Kolkata” ,“ Delhi”],[“ Delhi”,“ Kolkata”],[“ Kolkata”,“ Delhi”,“ Delhi”],[“ Delhi”,“ Delhi”,“ Kolkata”],[“ Kolkata”,“德里”,“德里”,“加尔各答”],但没有[“德里”,“德里”],因为只有一个唯一的单词。
为了解决这个问题,我们将遵循以下步骤-
定义一个功能work()
。这将需要单词,k
n:=字数
如果k等于0,则
返回0
cnt:=新映射
回答:= 0
l:= 0
对于0到n范围内的r,执行
cnt [words [l]]:= cnt [words [l]]-1
如果cnt [words [l]]与0相同,则
l:= l + 1
从cnt删除单词[l]
cnt [word]:= 0
字:=字[r]
如果cnt中没有单词,则
cnt [word]:= cnt [word] + 1
当cnt的大小> k时,
ans:= ans + r-l + 1
返回ans
从主方法返回(work(words, k)
-work(words,k-1))
让我们看下面的实现以更好地理解-
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