1. 程式人生 > 實用技巧 >[簡單-20.有效的括號]

[簡單-20.有效的括號]

[簡單-20.有效的括號]

給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。

示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true

方法1:使用棧,遇到左括號進行壓棧操作,右括號彈棧操作。然後在對一下特殊情況進行處理

class Solution {
public:
    bool isValid(string s) {
        int size = s.size();
        if (size == 0) return true;
        if ((s[0] == ')') || (s[0] == '}') || (s[0] == ']')) return false;
        stack<char>st;
        for (int i = 0; i<size; i++) {
            if ((s[i] == '(') || (s[i] == '[') || (s[i] == '{')) {
                  st.push(s[i]);
            }
            if (st.empty()) return false;
            if (s[i] == ')') {
                if (st.top() == '(') {
                    st.pop();
                } else {
                    return false;
                }
            }
            if (s[i] == ']') {
                if (st.top() == '[') {
                    st.pop();
                } else {
                    return false;
                }
            }
            if (s[i] == '}') {
                if (st.top() == '{') {
                    st.pop();
                } else {
                    return false;
                }
            }
        }
        if (st.size() != 0) return false;
        return true;
    }
};