標籤:style blog http ar io color sp for strong
Longest Valid Parentheses
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.
括弧匹配的常規思路就是用進出棧。
但是這題的關鍵在於“連續匹配”,因此計算“連續匹配”長度時,本質就是求不匹配的括弧之間最大長度。
也就是求進棧但未出棧的括弧下標之間的最大差值,注意邊界值:第一個留在棧中的括弧之前的連續匹配長度。
class Solution {public: int longestValidParentheses(string s) { int ret = 0; stack<int> stk; //store the indexes of unmatched parentheses for(int i = 0; i < s.size(); i ++) { if(s[i] == ‘(‘) //unmatch stk.push(i); else {//s[i] == ‘)‘ if(!stk.empty() && s[stk.top()] == ‘(‘) //match stk.pop(); else //unmatch stk.push(i); } } if(stk.empty()) //all match ret = s.size(); else {//check every unmatched pair of parentheses int start; int end = s.size()-1; while(!stk.empty()) { start = stk.top(); stk.pop(); ret = max(ret, end-start); end = start-1; } //from begin to the first unmatched parenthese ret = max(ret, end+1); } return ret; }};
【LeetCode】Longest Valid Parentheses