很经典的一道DP
求最大值的问题。
也可以巧妙的用stack
去求解,但是我们在学习过程中一定要掌握最根本的解法,不要去投机取巧学习很多奇技淫巧。
32. 最长有效括号
给定一个只包含
'('
和')'
的字符串,找出最长的包含有效括号的子串的长度。示例 1:
1
2
3
4 > 输入: "(()"
> 输出: 2
> 解释: 最长有效括号子串为 "()"
>
示例 2:
1
2
3
4 > 输入: ")()())"
> 输出: 4
> 解释: 最长有效括号子串为 "()()"
>
方法一(stack)
思路 :用一个栈来存储string
中的括号在string
中的下标,当s[i] == )
就有可能形成有效括号对,当栈顶元素为对应的字符为( s[st.top()] == (
则说明是有效括号对,则将栈顶元素弹出,用当前下标减去当前栈顶元素存储的下标,因为在栈中的元素是还未成功匹配的括号,已经匹配成功的元素已经出栈了,这里要处理当栈为空的特殊情况。
1 | class Solution { |
方法二(DP)
DP的思路我是参考如下大佬的想法:
1 | class Solution { |