ধরুন একটি এনকোডেড স্ট্রিং 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