สมมติว่าเรามีสตริงที่เข้ารหัสหนึ่งสตริงที่การซ้ำซ้อนของสตริงย่อยจะแสดงเป็นสตริงย่อยตามด้วยจำนวนสตริงย่อย ตัวอย่างเช่น หากสตริงคือ "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