1. 程式人生 > >leetcode題庫——最長有效括號

leetcode題庫——最長有效括號

題目描述:

給定一個只包含 '(' 和 ')' 的字串,找出最長的包含有效括號的子串的長度。

示例 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;噹噹前元素下標減去 棧頂元素下標大於最大長度時,則該長度為最大長度。除去上述情況,其他情況都將當前元素下標入棧。