题意:题目是要我们找出连续有效括号的最大长度。
分析与思路:括号匹配问题一般都会想到用栈来解决,我的方法就是用栈来做的。问题是找出字符串里面最长的一段的长度,也就是说可能有很多个有效段。我一开始想过用累加的方法,对于某个段,没匹配一个成功就长度加2,但是发现问题没有这么简单,这样子做会难以区分段的结束。后来我改用了字符对应的下标来计算长度,那么这样子的话就要在每一个字符的入栈出栈中伴随着对应的下标的入栈出栈。判断思路都在代码解释中了。
代码:
class Solution {
public:
int longestValidParentheses(string s) {
int maxlength = 0, nowlength = 0;
stack<char> st;//符号栈
stack<int> subscript;//符号对应下标
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(') {//左括号入栈
subscript.push(i);
st.push(s[i]);
}
else {//右括号
if (!st.empty() && st.top() == '(') {
st.pop();
subscript.pop();
if (st.empty()) nowlength = i + 1;
else nowlength = i - subscript.top();
if (nowlength > maxlength) maxlength = nowlength;
}
else {//无法匹配的右括号,会作为新的段的起点
st.push(s[i]);
subscript.push(i);
}
}
}
return maxlength;
}
};
本文介绍了一种使用栈解决最长有效括号问题的方法。通过记录字符的下标来计算连续有效括号的最大长度。
397

被折叠的 条评论
为什么被折叠?



