สมมติว่าเรามีสตริง S ของวงเล็บ '(' และ ')' เราเพิ่มจำนวนวงเล็บขั้นต่ำที่ตำแหน่งใดๆ เพื่อให้สตริงผลลัพธ์ในวงเล็บถูกต้อง สตริงวงเล็บจะใช้ได้ก็ต่อเมื่อ −
- เป็นสตริงว่าง
- สามารถเขียนเป็น XY (X ต่อด้วย Y) โดยที่ X และ Y เป็นสตริงที่ถูกต้อง
- สามารถเขียนเป็น (A) โดยที่ A เป็นสตริงที่ถูกต้อง
ดังนั้นหากสตริงเป็นแบบ "()))((" เราก็จำเป็นต้องเพิ่มวงเล็บอีก 4 อันเพื่อให้สตริงถูกต้อง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า S ว่างเปล่า ให้คืนค่า 0
- count :=0, temp เป็นอาร์เรย์ temp_counter :=0
- สำหรับฉันใน S
- ถ้าฉันเปิดวงเล็บ ให้ใส่ i ลงใน temp
- อย่างอื่น
- เมื่อความยาวของ temp> 0 และองค์ประกอบสุดท้ายของวงเล็บเปิดอยู่ ให้ลบองค์ประกอบสุดท้ายของ temp ออก ไม่เช่นนั้นให้ใส่ i ลงใน temp
- คืนค่าขนาดของอุณหภูมิ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution:
def minAddToMakeValid(self, S):
if not S:
return 0
count = 0
temp = []
temp_counter = 0
for i in S:
if i =='(':
temp.append(i)
else:
if len(temp)>0 and temp[len(temp)-1] =='(':
temp.pop(len(temp)-1)
else:
temp.append(i)
return len(temp)
ob = Solution()
print(ob.minAddToMakeValid("()))((")) อินพุต
"()))((" ผลลัพธ์
4