天天看點

有效括号序列(c++)

有效括号序列(c++)

借助輔助棧——右括号入棧

核心思想:

借助輔助棧,當遇到’(’,’[’,’{‘這三種字元的時候則讓對應的比對字元入棧(分别對應’)’,’]’,’}’),當出現的字元不是’(’,’[’,’{'這三種字元時,則先判斷棧是否為空或者目前字元是否與棧頂元素一樣,當棧空或者目前字元與棧頂字元不一樣時,則括号序列不合法,直接傳回;否則棧頂元素出棧。周遊字元串直到所有元素周遊完成。最後判斷棧是否為空,不為空則括号序列不合法;否則為合法序列

class Solution {
public:
    /**
     * 
     * @param s string字元串 
     * @return bool布爾型
     */
    bool isValid(string s) {
        // write code here
        stack<char>stk;
        for(char c : s){
            if(c == '('){//當遇到'(','[','{'這三種字元的時候則讓對應的比對字元入棧(分别對應')',']','}')
                stk.push(')');
            }else if(c == '{'){
                stk.push('}');
            }else if(c == '['){
                stk.push(']');
            }else{//當出現的字元不是'(','[','{'這三種字元時,則先判斷棧是否為空或者目前字元是否與棧頂元素一樣,當棧空或者目前字元與棧頂字元不一樣時,則括号序列不合法,直接傳回
                if(stk.empty() || stk.top() != c){
                    return false;
                }
                stk.pop();
            }
        }
        return stk.empty();//最後判斷棧是否為空,不為空則括号序列不合法;否則為合法序列
    }
};