ধরুন আমাদের একটি স্ট্রিং s আছে, এটি একটি দীর্ঘ স্ট্রিংকে এনকোড করছে। s কে n(t) এর সংমিশ্রণ হিসাবে উপস্থাপিত করা হয়, n(t) টি, n বারের সংমিশ্রণকে প্রতিনিধিত্ব করে এবং t হয় একটি নিয়মিত স্ট্রিং বা এটি পুনরাবৃত্তিমূলকভাবে অন্য এনকোড করা স্ট্রিং। আমাদের s-এর ডিকোডেড সংস্করণ খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি s ="3(pi)2(3(am))0(f)1(u)" এর মত হয়, তাহলে আউটপুট হবে "পিপিপিয়ামামামামামামু"
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
i :=0
-
একটি ফাংশন পার্স () সংজ্ঞায়িত করুন। এটি লাগবে
-
উত্তর :=একটি নতুন তালিকা
-
যখন i
-
যদি s[i] একটি সংখ্যা হয়, তাহলে
-
d :=0
-
যখন s[i] ডিজিট হয়, ডু
-
d :=10 * d + s[i]
এর পূর্ণসংখ্যা অংশ -
i :=i + 1
-
-
i :=i + 1
-
সেগমেন্ট :=পার্স()
-
i :=i + 1
-
উত্তরে d বার সেগমেন্ট সন্নিবেশ করুন
-
-
অন্যথায়,
-
উত্তরের শেষে s[i] সন্নিবেশ করুন
-
i :=i + 1
-
-
-
উত্তরের আইটেম যোগ করার পরে স্ট্রিং ফেরত দিন
-
মূল পদ্ধতি থেকে পার্স()
রিটার্ন করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class Solution: def solve(self, s): i = 0 def parse(): nonlocal i ans = [] while i < len(s) and s[i] != ")": if s[i].isdigit(): d = 0 while s[i].isdigit(): d = 10 * d + int(s[i]) i += 1 i += 1 segment = parse() i += 1 ans.extend(segment for _ in range(d)) else: ans.append(s[i]) i += 1 return "".join(ans) return parse() ob = Solution() s = "3(pi)2(3(am))0(f)1(u)" print(ob.solve(s))
ইনপুট
"3(pi)2(3(am))0(f)1(u)"
আউটপুট
pipipiamamamamamamu