【LeetCode】32. 最長有效括號
阿新 • • 發佈:2018-12-16
題目描述
給定一個只包含 '('
和 ')'
的字串,找出最長的包含有效括號的子串的長度。
示例 1:
輸入: "(()"
輸出: 2
解釋: 最長有效括號子串為 "()"
示例 2:
輸入: ")()())"
輸出: 4
解釋: 最長有效括號子串為 "()()"
思路
用棧 p 儲存還未匹配的 ( 的下標,flag 用來標記 ( 的位置;
當 s[ i ] 為 ( 時,直接入棧,為 ) 時,若棧為空,flag = i + 1,前面的都作廢;
匹配 ( 後,若棧為空, 求長度,要加 1!
程式碼
class Solution { public: int longestValidParentheses(string s) { int res = 0; int n = s.size(); stack<int> p; int flag = 0; for(int i=0; i<n; i++){ if(s[i] == '('){ p.push(i); }else{ if(p.empty()) flag = i + 1; else{ p.pop(); if(p.empty()) res = max(res, i-flag+1); else res = max(res, i-p.top()); } } } return res; } };