牛客題霸 [括號序列] C++題解/答案

Jozky86發表於2020-11-09

牛客題霸 [括號序列] C++題解/答案

題目描述

給出一個僅包含字元’(’,’)’,’{’,’}’,’[‘和’]’,的字串,判斷給出的字串是否是合法的括號序列
括號必須以正確的順序關閉,"()“和”()[]{}“都是合法的括號序列,但”(]“和”([)]"不合法。

題解:

用棧來做
用棧來存每個符號的左邊,當出現符號右邊時,看棧的頂部是否為該符號的左邊,如果不能匹配則返回0,能匹配則將棧頂pop
全部結束時棧應該是空的,否則返回0
注意:題目給的資料有可能會先輸入符號的右部分,所以當棧為空時也應該壓入字元

if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty())

沒有這個q.empty()會導致段錯誤

程式碼:

class Solution {
public:
    /**
     * 
     * @param s string字串 
     * @return bool布林型
     */
    bool isValid(string s) {
        // write code here
        stack<char>q;
        for(int i=0;i<s.length();i++)
        {
            if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty())
            {
                q.push(s[i]);
                continue;
            }
            if(s[i]==')'&&q.top()!='(')return false;
            else if(s[i]=='}'&&q.top()!='{')return false;
            else if(s[i]==']'&&q.top()!='[')return false;
            else if(q.empty())return false;
            q.pop();
        }
        if(q.empty())return true;
        else return false;
    }
};

相關文章