Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ถอดรหัสสตริงที่ดัชนีใน Python


สมมติว่าให้สตริงเข้ารหัส S หนึ่งอัน เราต้องหาและเขียนสตริงที่ถอดรหัสลงในเทป ที่นี่สตริงที่เข้ารหัสจะถูกอ่านทีละอักขระและดำเนินการตามขั้นตอนต่อไปนี้ -

  • หากตัวอักษรที่อ่านเป็นตัวอักษร จดหมายนั้นก็จะถูกเขียนลงบนเทป
  • หากตัวอักษรที่อ่านเป็นตัวเลข เทปปัจจุบันทั้งหมดจะถูกเขียนซ้ำๆ กัน รวมอีก 1 ครั้ง

ตอนนี้ หากสตริงที่เข้ารหัส S และดัชนี K ถูกกำหนด ให้ค้นหาและส่งกลับตัวอักษร K-th (ดัชนีเริ่มต้นจาก 1) ในสตริงที่ถอดรหัส

ดังนั้นหากสตริงคือ "hello2World3" และ k =10 ผลลัพธ์จะเป็น "o" เนื่องจากสตริงที่ถอดรหัสจะเป็น "hellohelloWorldhellohelloWorldhellohelloWorld" ดังนั้นอักขระตัวที่ 10 คือ "o"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ขนาด :=0
  • สำหรับ i ในสตริง s
    • ถ้าฉันเป็นอักขระที่เป็นตัวเลข แล้ว size :=size * จำนวนเต็มจาก i มิฉะนั้น size :=size + 1
  • สำหรับ i ในช่วงความยาว s – 1 ลงไปที่ 0
    • k :=k ขนาด mod
    • ถ้า s[i] เป็นตัวเลขและ k =0 ให้คืนค่า s[i]
    • ถ้า s[i] เป็นตัวเลข ให้ลดขนาดลง 1 มิฉะนั้น size :=size / integer of 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