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