কম্পিউটার টিউটোরিয়াল

পাইথনে n(t) ফরম্যাটের এনকোডেড স্ট্রিং ডিকোড করা

একটি স্ট্রিং s দেওয়া আছে যা n(t) ফরম্যাটে এনকোডেড। এখানে n(t) মানে t স্ট্রিংটি n বার রিপিট। t বা तो সাধারণ স্ট্রিং হতে পারে অথবা আবার নেস্টেড এনকোডেড স্ট্রিং। ডিকোডেড স্ট্রিং বের করতে হবে।

উদাহরণ: s = "3(pi)2(3(am))0(f)1(u)" → আউটপুট "pipipiamamamamamamu"।

সমাধানের ধাপসমূহ (রিকার্সিভ ডিসেন্ট পার্সিং)

  1. i := 0 (গ্লোবাল ইনডেক্স)।

  2. parse() ফাংশন ডিফাইন করুন:

    • ans = []।

    • যখন i < len(s) এবং s[i] != ')':

      • যদি s[i] ডিজিট হয়: পুরো নম্বর d পড়ুন, i++ ( '(' স্কিপ), segment = parse(), i++ ( ')' স্কিপ), segment কে d বার ans-এ এক্সটেন্ড করুন।

      • অন্যথায়: ans.append(s[i]), i++।

    • "".join(ans) রিটার্ন করুন।

  3. parse() কল করে ফলাফল পান।

পাইথন কোড উদাহরণ

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  # skip '('
                    segment = parse()
                    i += 1  # skip ')'
                    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
  1. হেক্সাডেসিমেল স্ট্রিংকে দশমিকে রূপান্তর করার পাইথন প্রোগ্রাম

  2. পাইথন প্রোগ্রাম: স্ট্রিং-এ URL চেক করা

  3. পাইথন প্রোগ্রাম: স্ট্রিং-এ মিরর ক্যারেক্টার বের করা

  4. পাইথন ৩-এ ডিকশনারি ব্যবহার করে স্ট্রিং ফরম্যাট করা