32. Longest Valid Parentheses
Question
Given a string containing just the characters
'('
and')'
, find the length of the longest valid (well-formed) parentheses substring.
Solution
如果有右括号先出现于左括号,则其永远无法配对。
而如果是左括号先出现,则其有可能可以和之后的右括号进行配对。
因此我们可以将左括号的位置入栈,等待配对。
并记录上一个不能配对的右括号的位置。以此来确定当前位置的有效括号长度。
首先将上一个不能组队的右括号lastRightParenthese初始化为-1。
初始化一个最大有效长度best。
然后遍历字符串:
- 当遇到左括号时:
- 将当前下标i压入栈。(记录等待配对的左括号)
- 遇到右括号时:
- 如果栈为空,则更新上一个不能组队的右括号的位置为当前下标i。(此时出现的右括号一定无法配对)
- 如果栈不为空,则挤出上一个左括号的下标,与右括号配对。
- 挤出上一个左括号后,如果栈为空。则将当前的有效括号总长度为i - lastRightParenthese。(当前的右括号和上一个不能配对的右括号的差)
- 否则当前的有效括号总长度为i - stack.peek()。(当前的右括号和上一个不配对的左括号的差。)
Code
1 | class Solution { |
32. Longest Valid Parentheses
https://xuanhe95.github.io/2022/05/24/32-Longest-Valid-Parentheses/