20. 有效的括號(hào)

題目:https://leetcode-cn.com/problems/valid-parentheses/
給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。

有效字符串需滿足:

左括號(hào)必須用相同類型的右括號(hào)閉合。
左括號(hào)必須以正確的順序閉合。

我的方法一:棧

如果是左括號(hào)那么壓棧,如果是右括號(hào),然后比較和棧頂?shù)淖罄ㄌ?hào)是否是一對(duì),如果不是,那么無(wú)效

邊界條件

這個(gè)題比較簡(jiǎn)單,主要需要考慮幾個(gè)邊界情況

  1. 可能出現(xiàn)右括號(hào)時(shí),棧為空,說(shuō)明沒(méi)有對(duì)應(yīng)的左括號(hào),不合法
  2. 當(dāng)遍歷完了所有的括號(hào)后,可能棧不為空,說(shuō)明左括號(hào)的數(shù)量多于右括號(hào),也不合法

代碼

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        int n = s.size();
        const char* str = s.c_str();

        for(int i = 0; i < n; i++) {
            if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
                stk.push(str[i]);
            }else{
                if(s.empty()){
                    return false;
                }
                if (str[i] == ')'){
                    if(stk.top() != '('){
                        return false;
                    }else{
                        stk.pop();
                    }
                }else if (str[i] == '}'){
                    if(stk.top() != '{'){
                        return false;
                    }else{
                        stk.pop();
                    }
                }else if (str[i] == ']'){
                    if(stk.top() != '['){
                        return false;
                    }else{
                        stk.pop();
                    }
                }
            }
        }

        return stk.empty();
    }
};

其他方法

優(yōu)化點(diǎn),判斷是否是偶數(shù)

如果是奇數(shù),肯定不合法,所以一個(gè)很好的優(yōu)化

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容