กำหนดสตริงประกอบด้วย '(' และ ')' ต้องหาความยาวของ substring ที่เป็น valid parentheses ยาวที่สุด
ตัวอย่าง: "))(())())" → 6 (substring "(())()")
ขั้นตอนการแก้ปัญหา (Stack)
- stack เริ่มต้น [-1], ans = 0
- วน i: ถ้า s[i]=='(' → push i
- ถ้า s[i]==')': ถ้า stack[-1]!=-1 และ s[stack[-1]]=='(' → pop, ans = max(ans, i - stack[-1])
- มิฉะนั้น push i
ตัวอย่างโค้ด
class Solution(object):
def longestValidParentheses(self, s):
stack = [-1]
ans = 0
for i in range(len(s)):
if s[i] == "(":
stack.append(i)
else:
if stack and stack[-1] != -1 and s[stack[-1]] == "(":
stack.pop()
ans = max(ans, i - stack[-1])
else:
stack.append(i)
return ans
ob = Solution()
print(ob.longestValidParentheses("))(())())"))
อินพุต
"))(())())"
เอาต์พุต
6