本题选自力扣32.最长有小括号
本题共有两种解法:1.利用栈处理 2.动态规划法
首先先从容易理解的栈处理法开始,动态规划法如果之前没有接触过可以先浏览这篇博客https://blog.youkuaiyun.com/dekulugu/article/details/108572140,从一道简单移动的动态规划算法题开始理解
- 利用栈处理
对于遇到的每个 ’ ( ’ ,我们将它的下标放入栈中.
对于遇到的每个 ’ ) ',我们先弹出栈顶元素,并且尝试匹配当前这个右括号
如果栈为空,说明这个右括号没有左括号能进行匹配,我们把他放入栈中,同时他的下标就代表着我们重新开始计算下一段有效括号长度的起始位置
如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度」
因为我们存在有以 ’ ) ’ 起手的情况,所以我们先放入一个-1放置出栈时出错。
我们以())((())为例: