1. 程式人生 > 其它 ># leetcode#20有效的括號

# leetcode#20有效的括號

技術標籤:leetcode50題leetcode

leetcode#20有效的括號

題目

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

思路

迴圈字串,把左邊各種括號壓入棧。如果遇到右括號,則跟棧頂的符號比較。如果匹配,則棧頂元素出棧,不匹配則返回false


示例 1:

輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
c++```
class Solution {
public:
    bool isValid(string s) {
        if(s=="")return true;
        stack<char> st;
        for(auto i:s){
            if(i=='(' || i=='{' || i=='[')
                st.push(i);
            else{
                if(st.size()==0 && (i==']'||i=='}'||i==')'))
                    return false;
                else if(i=='}' && st.top()!='{'  || i==']'&& st.top()!='[' || i==')' && st.top()!='(')
                    return false;
                else
                    st.pop();
            }
        }
        if(st.size()!=0)
            return false;
        return true;
    }
};