算法练习(12):Longest Valid Parentheses

来源:互联网 发布:变身之网络妖星系统 编辑:程序博客网 时间:2024/06/06 00:23

题意:题目是要我们找出连续有效括号的最大长度。

分析与思路:括号匹配问题一般都会想到用栈来解决,我的方法就是用栈来做的。问题是找出字符串里面最长的一段的长度,也就是说可能有很多个有效段。我一开始想过用累加的方法,对于某个段,没匹配一个成功就长度加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;}};

原创粉丝点击