สมมติว่าเรามีสตริง s เราต้องเข้ารหัสสิ่งนี้โดยใช้เทคนิคการเข้ารหัสแบบรัน-ยาว อย่างที่เราทราบกันดีว่าการเข้ารหัสแบบรัน-ยาวเป็นวิธีที่ง่ายและรวดเร็วในการเข้ารหัสสตริง แนวคิดมีดังนี้ - องค์ประกอบต่อเนื่อง (อักขระ) ซ้ำ ๆ เป็นการนับและอักขระเดียว
ดังนั้น หากอินพุตเป็น s ="BBBBAAADDCBB" ผลลัพธ์จะเป็น "4B3A2D1C2B"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- res :=สตริงว่าง
- tmp :=อักขระตัวแรกของ s
- นับ :=1
- สำหรับฉันในช่วง 1 ถึงขนาด s ทำ
- ถ้า s[i] ไม่เหมือนกับ tmp แล้ว
- res :=res concatenate count เชื่อม tmp
- tmp :=s[i]
- นับ :=1
- มิฉะนั้น
- นับ :=นับ + 1
- ถ้า s[i] ไม่เหมือนกับ tmp แล้ว
- return res concatenate count เชื่อม tmp
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s): res = "" tmp = s[0] count = 1 for i in range(1,len(s)): if s[i] != tmp: res += str(count) + tmp tmp = s[i] count = 1 else: count += 1 return res + str(count) + tmp ob = Solution() print(ob.solve("BBBBAAADDCBB"))
อินพุต
"BBBBAAADDCBB"
ผลลัพธ์
4B3A2D1C2B