একটি ওয়ার্ড লিস্ট words এবং একটি মান k দেওয়া আছে। এমন সাবলিস্ট (কন্টিগুয়াস) কতটি আছে যাতে সেটিতে ঠিক kটি আলাদা ওয়ার্ড থাকে, সেটি বের করতে হবে।
উদাহরণস্বরূপ, words = ["Kolkata","Delhi","Delhi","Kolkata"], k=2 হলে আউটপুট ৫।
সমাধানের পদ্ধতি (স্লাইডিং উইন্ডো + atMost(k) - atMost(k-1))
সাবলিস্ট কাউন্ট করার লজিক পिछলার count(K) ফাংশনের মতোই, শুধু এখানে ইন্টিজার বদলে স্ট্রিং/ওয়ার্ড।
পাইথন কোড উদাহরণ
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 = {}
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