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.
用一个stack来维护上一个未匹配的位置,当出现匹配情况时更新最大值
class Solution { public: int longestValidParentheses(string s) { // Start typing your C/C++ solution below // DO NOT write int main() function int n = s.length(); if(n < 2) return 0; int maxR = 0 , top,result ; stack<int> myS; for(int i = 0; i < n; i++) { if(s[i] == '(' || myS.empty()) myS.push(i); else { top = myS.top(); if(s[top] == '(') { myS.pop(); result = myS.empty()? i+1: i - myS.top(); maxR = maxR > result ? maxR : result ; }else myS.push(i); } } return maxR; } };