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

ค้นหาอักขระที่ k ของสตริงถอดรหัส - Set – 2 ใน Python


สมมติว่าเรามีสตริงที่เข้ารหัสหนึ่งสตริงที่การซ้ำซ้อนของสตริงย่อยจะแสดงเป็นสตริงย่อยตามด้วยจำนวนสตริงย่อย ตัวอย่างเช่น หากสตริงคือ "pq2rs2" และ k=5 ดังนั้นเอาต์พุตจะเป็น 'r' เนื่องจากสตริงที่ถอดรหัสคือ "pqpqrs" และอักขระตัวที่ 5 คือ 'r' เราต้องจำไว้ว่าความถี่ของสตริงย่อยที่เข้ารหัสสามารถมีได้มากกว่าหนึ่งหลัก

ดังนั้น หากอินพุตเป็นเหมือน string ="pq4r2ts3" และ k =11 เอาต์พุตจะเป็น i เนื่องจากสตริงคือ pqpqpqpqrrststs

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

  • เข้ารหัส :=สตริงว่าง

  • เกิดขึ้น :=0, ผม :=0

  • ในขณะที่ฉัน <ขนาดของ str ทำ

    • temp :=สตริงว่าง

    • เกิดขึ้น :=0

  • ในขณะที่ i <ขนาดของ str และ str[i] เป็นตัวอักษร ทำ

    • temp :=temp + str[i]

    • ผม :=ผม + 1

  • ในขณะที่ i <ขนาดของ str และ str[i] เป็นตัวเลข ให้ทำ

    • เกิดขึ้น :=เกิดขึ้น * 10 + ASCII ของ (str[i]) - ASCII ของ ('0')

    • ผม :=ผม + 1

  • สำหรับ j ในช่วง 1 ถึงเกิดขึ้น + 1 เพิ่มขึ้น 1 ทำ

    • เข้ารหัส :=เข้ารหัส + อุณหภูมิ

  • หากเกิดขึ้นเหมือนกับ 0 แล้ว

    • เข้ารหัส :=เข้ารหัส + อุณหภูมิ

  • เข้ารหัสกลับ[k - 1]

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def find_kth_char(str, k):
   encoded = ""
   occurrence = 0
   i = 0
   while i < len(str):
      temp = ""
      occurrence = 0
      while (i < len(str) and ord(str[i]) >= ord('a') and ord(str[i]) <= ord('z')):
         temp += str[i]
         i += 1
      while (i < len(str) and ord(str[i]) >= ord('1') and ord(str[i]) <= ord('9')):
         occurrence = occurrence * 10 + ord(str[i]) - ord('0')
         i += 1
      for j in range(1, occurrence + 1, 1):
         encoded += temp
   if occurrence == 0:
      encoded += temp
   return encoded[k - 1]

str = "pq4r2ts3"
k = 11
print(find_kth_char(str, k))

อินพุต

"pq4r2ts3", 11

ผลลัพธ์

t