ধরুন একটি এনকোডেড স্ট্রিং S দেওয়া আছে। আমাদের একটি টেপে ডিকোড করা স্ট্রিং খুঁজে বের করতে হবে এবং লিখতে হবে, এখানে এনকোড করা স্ট্রিংটি একবারে একটি অক্ষর পড়া হয় এবং নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করা হয় -
- পড়া অক্ষরটি যদি একটি অক্ষর হয়, তবে সেই অক্ষরটি কেবল টেপে লেখা হয়।
- যদি পঠিত অক্ষরটি একটি সংখ্যা হয়, তাহলে পুরো বর্তমান টেপটি বারবার অঙ্ক লেখা হয় – মোট আরও 1 বার।
এখন যদি কিছু এনকোড করা স্ট্রিং S, এবং একটি সূচক K দেওয়া হয়, তাহলে ডিকোড করা স্ট্রিং-এ K-তম অক্ষর (1 থেকে সূচকগুলি শুরু হয়) খুঁজুন এবং ফেরত দিন।
সুতরাং যদি স্ট্রিংটি "hello2World3" এবং k =10 হয়, তাহলে আউটপুট হবে "o"। এর কারণ হল ডিকোড করা স্ট্রিং হবে "hellohelloWorldhelloWorldhellohelloWorld", তাই 10 তম অক্ষর হল "o"৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- আকার :=0
- এর জন্য i স্ট্রিং s
- যদি আমি একটি সাংখ্যিক অক্ষর হয়, তাহলে সাইজ :=সাইজ * i থেকে পূর্ণসংখ্যা, অন্যথায় সাইজ :=সাইজ + 1
- এর জন্য s-এর দৈর্ঘ্য 1 থেকে 0
- পর্যন্ত
- k :=k মোড সাইজ
- যদি s[i] সাংখ্যিক হয় এবং k =0, তাহলে s[i] ফেরত দিন
- যদি s[i] সাংখ্যিক হয়, তাহলে সাইজ 1 কমিয়ে দিন, অন্যথায় সাইজ :=সাইজ/s[i] এর পূর্ণসংখ্যা
- খালি স্ট্রিং ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution(object): def decodeAtIndex(self, s, k): """ :type S: str :type K: int :rtype: str """ size = 0 for i in s: if i.isdigit(): size *= int(i) else: size += 1 #print(size) for i in range(len(s) - 1, -1, -1): k %= size if s[i].isalpha() and k == 0: return s[i] if s[i].isalpha(): size -=1 else: size /= int(s[i]) return "" ob = Solution() print(ob.decodeAtIndex("hello2World3", 10))
ইনপুট
"hello2World3" 10 ob.decodeAtIndex("hello2World3", 10)
আউটপুট
o