ให้สตริง S ตัวพิมพ์เล็ก ทำการลบตัวอักษรซ้ำติดกัน (adjacent duplicates) ซ้ำๆ จนไม่มีซ้ำติดกันเหลือ คืนสตริงผลลัพธ์
ตัวอย่าง: "abbacaca" → ลบ "bb" ได้ "aacaca" → ลบ "aa" ได้ "caca" (จบ)
ขั้นตอนการแก้ปัญหา (Stack)
- สร้าง stack ว่าง
stตั้งi = 0 - วนลูป
while i < len(S):- ถ้า stack ไม่ว่าง และ
st[-1] == S[i]: pop stack,i += 1 - มิฉะนั้น: push
S[i]เข้า stack,i += 1
- ถ้า stack ไม่ว่าง และ
- รวม stack เป็นสตริงคืนค่า
ตัวอย่างโค้ด
class Solution(object):
def removeDuplicates(self, S):
st = []
i = 0
while i < len(S):
if len(st) != 0 and st[-1] == S[i]:
i += 1
st.pop(-1)
else:
st.append(S[i])
i += 1
return "".join(i for i in st)
ob1 = Solution()
print(ob1.removeDuplicates("abbacaca"))
อินพุต
"abbacaca"
เอาต์พุต
"caca"
วิธีแก้แบบ Pythonic (ใช้ list เป็น stack)
def removeDuplicates(S):
stack = []
for ch in S:
if stack and stack[-1] == ch:
stack.pop()
else:
stack.append(ch)
return "".join(stack)