leetcode 32. Longest Valid Parentheses

来源:互联网 发布:古诗软件下载 编辑:程序博客网 时间:2024/05/22 04:53

1.题目

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

给你一串括号,找到最长的有效匹配的括号的长度。

2.思路 

1. 创建一个栈,栈顶存放的是上次匹配失败的括号的下标;

2. 初始化,首先将-1入栈;

3.遍历字符串,如果是左括号'(',将左括号的下标入栈;

4.如果是右括号')',如果栈中元素个数>1,则代表有匹配的左括号,弹出栈顶元素,更新最大值;否则,代表右括号之前没有左括号,将右括号的位置入栈。

class Solution {public:    int longestValidParentheses(string str) {       stack<int> s;       s.push(-1);       int ans = 0;       for(int i = 0;i<str.size();i++){           if(str[i] == '('){               s.push(i);           }           else{               if(s.size() > 1){                   s.pop();                   ans = max(ans,i-s.top());                }               else{                   s.pop();                   s.push(i);               }           }       }       return ans;    }};


0 0