1. 程式人生 > >【LEETCODE】【簡單】#20 有效的括號

【LEETCODE】【簡單】#20 有效的括號

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

有效字串需滿足:

  1. 左括號必須用相同型別的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true
#include <stack>
class Solution {
public:
    bool isValid(string s) {
        int i=s.size();
        stack <char>stk;
        int j;
        for(j=0;j<i;j++){       
           switch(s[j]){        //遇到左括號進棧,遇到右括號與棧頂元素對比
            case'{':
            case'[':
            case'(':stk.push(s[j]);break;
            case'}':if(!stk.empty()&&'{'==stk.top()){stk.pop();break;}    //不匹配時return false
                    else return false;
            case']':if(!stk.empty()&&'['==stk.top()){stk.pop();break;}
                    else return false;
            case')':if(!stk.empty()&&'('==stk.top()){stk.pop();break;}
                    else return false;
            }
        }
        if(!stk.empty())return false;        //棧非空時證明有單獨的左括號,return false
        else return true;                    //當s為空時棧也為空,return true
    }
};

【後記】

1.最開始忽略了先遇到右括號(此時棧空無法比較)這種情況,也忽略了字串為空這種情況

2.用C++好爽啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊