ภาพรวม
สตริง "ดี" (Good String) หมายถึงสตริงที่ไม่มีตัวอักษรติดกัน 2 ตัวที่เป็นตัวอักษรเดียวกันแต่ต่าง case (พิมพ์เล็ก-พิมพ์ใหญ่) เช่น 'aA' หรือ 'Bb' โปรแกรมจะลบคู่ตัวอักษรแบบนี้ซ้ำๆ จนกว่าสตริงจะกลายเป็น "ดี"
ตัวอย่าง
อินพุต: "popPpulaBbr"
กระบวนการ: ลบ 'pP' หรือ 'Pp' และลบ 'Bb' → ผลลัพธ์ "popular"
ขั้นตอนการแก้ปัญหา (ใช้ Stack)
- สร้างลิสต์ว่าง
resใช้เป็น Stack - วนลูปผ่านแต่ละตัวอักษร
chในสตริงs:- ถ้า
resไม่ว่าง และตัวอักษรสุดท้ายในresเป็นตัวอักษรเดียวกับchแต่ต่าง case (เช่น'a'กับ'A') ให้pop()ตัวสุดท้ายออก - มิฉะนั้น ให้
append(ch)เข้าres
- ถ้า
- รวมสมาชิกใน
resเป็นสตริงและคืนค่า
ตัวอย่างโค้ด (Python)
def solve(s):
res = []
for ch in s:
if res and res[-1] != ch and res[-1].lower() == ch.lower():
res.pop()
else:
res.append(ch)
return ''.join(res)
s = "popPpulaBbr"
print(solve(s))
อินพุต
"popPpulaBbr"
เอาต์พุต
popular
ความซับซ้อน
- เวลา: O(n) โดย n = ความยาวสตริง
- พื้นที่: O(n) สำหรับ Stack