[leetcode]有效的括號

asakamaarion發表於2020-10-31

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。

  • 示例 1:
    輸入: “()”
    輸出: true

  • 示例 2:
    輸入: “()[]{}”
    輸出: true

  • 示例 3:
    輸入: “(]”
    輸出: false

  • 示例 4:
    輸入: “([)]”
    輸出: false

  • 示例 5:
    輸入: “{[]}”
    輸出: true

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/valid-parentheses


思路

  • 若為左括號,則入棧;
  • 若為右括號,而棧為空,返回false;若棧頂元素與右括號匹配,則彈出棧頂元素;若不匹配,返回false。
  • 當全部執行完之後,棧不為空,返回false
  • 最後返回true

程式碼

class Solution {
public:
    bool isValid(string s) {
        stack<char> a;
        int i;

        for(i=0;i<s.length();i++)
        {
            if(s[i]=='(' || s[i]=='[' || s[i]=='{')
            {
                a.push(s[i]);
            }
            else if(s[i]==')' || s[i]==']' || s[i]=='}')
            {
                if(a.empty())   return false;
                if((a.top()=='(' && s[i]==')') || (a.top()=='[' && s[i]==']') || (a.top()=='{' && s[i]=='}'))
                {
                    a.pop();
                }
                else return false;
            }
        }
        if(!a.empty())
            return false;
        return true;
    }
};

總結

  • 棧的宣告要記得型別= =

相關文章