ধরুন আমাদের একটি ছোট হাতের স্ট্রিং s আছে, আমরা s কে যতটা সম্ভব টুকরো টুকরো করে ভাগ করতে পারি যাতে প্রতিটি অক্ষর সর্বাধিক এক টুকরোতে উপস্থিত হয় এবং একটি তালিকা হিসাবে পার্টিশনের আকার খুঁজে পায়।
সুতরাং, যদি ইনপুটটি s ="momoplaykae" এর মত হয়, তাহলে আউটপুট হবে [4, 1, 1, 4, 1], যেহেতু স্ট্রিংটি ["momo", "p", "l", "এ বিভক্ত হয়। ayka", "e"]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
গণনা :=একটি মানচিত্র যাতে s-এ অক্ষর থাকে এবং তাদের উপস্থিতি
-
out :=একটি নতুন তালিকা, stk :=একটি খালি স্ট্যাক
-
দৈর্ঘ্য :=0
-
প্রতিটি অক্ষরের জন্য s, করুন
-
গণনা [চর] :=গণনা [চর] - 1
-
দৈর্ঘ্য :=দৈর্ঘ্য + 1
-
যদিও গণনা [চর] 0 এর মত নয় বা stk খালি নয়, করুন
-
যদি গণনা [চর] 0 এর সমান না হয়, তাহলে
-
stk
-এ char ধাক্কা দিন -
লুপ থেকে বেরিয়ে আসুন
-
-
যদি stk খালি না হয় এবং গণনা [stk-এর উপরে] 0 এর সমান হয়, তাহলে
-
stk
থেকে পপ
-
-
অন্যথায়,
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
যদি stk খালি হয় এবং গণনা [char] 0 এর মত হয়, তাহলে
-
আউটের পরে দৈর্ঘ্য সন্নিবেশ করুন
-
দৈর্ঘ্য :=0
-
-
-
ফিরে আসুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
from collections import Counter class Solution: def solve(self, s): count = Counter(s) out = [] stk = [] length = 0 for char in s: count[char] -= 1 length += 1 while count[char] != 0 or stk: if count[char] != 0: stk.append(char) break if stk and count[stk[-1]] == 0: stk.pop() else: break if not stk and count[char] == 0: out += [length] length = 0 return out ob = Solution() s = "momoplaykae" print(ob.solve(s))
ইনপুট
"momoplaykae"
আউটপুট
[4, 1, 1, 4, 1]