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