ধরুন আমরা একটি স্ট্রিং s আছে. এখন একটি বিভক্তিকে একটি ভাল বিভাজন বলা হয় যখন আমরা s কে 2টি অ-খালি স্ট্রিং p এবং q এ বিভক্ত করতে পারি যেখানে এর সংযোজন s এর সমান এবং p এবং q এর স্বতন্ত্র অক্ষরগুলির সংখ্যা সমান। আমাদের খুঁজে বের করতে হবে কতগুলো ভালো বিভাজন আমরা s-তে করতে পারি।
সুতরাং, যদি ইনপুটটি s ="xxzxyx" এর মতো হয়, তাহলে আউটপুট হবে 2 কারণ বিভক্ত করার একাধিক উপায় রয়েছে কিন্তু যদি আমরা ("xxz", "xyx") বা ("xxzx", "yx") এর মতো বিভক্ত করি। তাহলে তারা ভালো।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ফলাফল :=0
-
বাম :=আইটেমের ফ্রিকোয়েন্সি গণনা করার জন্য একটি খালি ম্যাল
-
ডান :=s
এ উপস্থিত প্রতিটি অক্ষরের ফ্রিকোয়েন্সি গণনা করুন -
প্রতিটি c-এর জন্য s, do
-
left[c] :=left[c] + 1
-
right[c] :=right[c] - 1
-
যদি ডান [c] শূন্য হয়, তাহলে
-
ডানদিকে সরান[c]
-
-
যদি বামের আকার ডানের আকারের সমান হয়, তাহলে
-
ফলাফল :=ফলাফল + 1
-
-
-
ফেরত ফলাফল
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
from collections import Counter def solve(s): result = 0 left, right = Counter(), Counter(s) for c in s: left[c] += 1 right[c] -= 1 if not right[c]: del right[c] if len(left) == len(right): result += 1 return result s = "xxzxyx" print(solve(s))
ইনপুট
"xxzxyx"
আউটপুট
2