leetcode題庫——最長有效括號
阿新 • • 發佈:2018-11-25
題目描述:
給定一個只包含 '('
和 ')'
的字串,找出最長的包含有效括號的子串的長度。
示例 1:
輸入: "(()"
輸出: 2
解釋: 最長有效括號子串為 "()"
示例 2:
輸入: ")()())
" 輸出: 4 解釋: 最長有效括號子串為"()()"
方法:
class Solution { public: int longestValidParentheses(string s) { stack<int> sta; int max=0; for(int i=0;i<s.size();i++){ if(s[i]==')'&&sta.size()!=0&&s[sta.top()]=='('){ sta.pop(); if(sta.size()==0) max=i+1; else if(i-sta.top()>max) max=i-sta.top();//記錄最長子串長度 } else sta.push(i); } return max; } };
思路:
遍歷字串,若在堆疊非空時,棧頂元素為“(”並且當前元素為“)”,則該括號為有效括號。
在上述情況下,彈出棧頂元素,若彈出後,棧為空,則最大值為當前下標+1;噹噹前元素下標減去 棧頂元素下標大於最大長度時,則該長度為最大長度。除去上述情況,其他情況都將當前元素下標入棧。