สมมติว่าเรามีสตริง s เราจะลบอักขระที่ซ้ำกันตัวแรกที่ซ้ำกันติดต่อกัน เราต้องหาเส้นสุดท้ายให้เจอ
ดังนั้น หากอินพุตเป็น s ="xyyyxzz" ผลลัพธ์จะเป็น "z" เนื่องจาก "yyy" เป็นอักขระที่ซ้ำกันตัวแรกที่ซ้ำกันซึ่งจะถูกลบ ดังนั้นเราจึงมี "xxxz" จากนั้น "xxx" จะถูกลบเพื่อลงท้ายด้วย "z"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- stack :=สแต็คใหม่
- ผม :=0
- ในขณะที่ฉัน <ขนาดของ s ทำ
- ถ้า stack ไม่ว่างและด้านบนของ stack เหมือนกับ s[i] แล้ว
- x :=ลบองค์ประกอบสุดท้ายออกจากสแต็ก
- ในขณะที่ i <ขนาดของ s และ x เท่ากับ s[i] ให้ทำ
- ผม :=ผม + 1
- i :=i - 1
- มิฉะนั้น
- ดัน s[i] ลงในสแต็ก
- ผม :=ผม + 1
- ถ้า stack ไม่ว่างและด้านบนของ stack เหมือนกับ s[i] แล้ว
- กลับมาหลังจากเข้าร่วมองค์ประกอบสแต็ก
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s): stack = [] i = 0 while i < len(s): if len(stack) and stack[-1] == s[i]: x = stack.pop() while i < len(s) and x == s[i]: i += 1 i -= 1 else: stack.append(s[i]) i += 1 return "".join(stack) ob = Solution() s = "xyyyxxz" print(ob.solve(s))
อินพุต
"xyyyxxz"
ผลลัพธ์
z