কম্পিউটার

পাইথনে সূচকে ডিকোড করা স্ট্রিং


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

  1. পাইথনে বিপরীত স্ট্রিং

  2. পাইথনে casefold() স্ট্রিং

  3. পাইথনে ক্রম সূচক দ্বারা কিভাবে পুনরাবৃত্তি করবেন?

  4. কিভাবে পাইথনে একটি স্ট্রিং আকার পেতে?