สมมติว่าให้สตริงเข้ารหัส 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