题目简介:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
 
- 左括号必须以正确的顺序闭合。
 
注意空字符串可被认为是有效字符串。
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
思路:
利用栈的特性,遇到左括号则直接入栈,遇到右括号则判断栈顶元素是否为与之相对应的括号,不是则返回false。
需要注意的是,若遇到右括号时栈为空,则返回false。
最后遍历完成时,若栈不为空则返回false,栈为空则返回true。(括号是否全部匹配完)
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
   | class Solution { public:     bool isValid(string s) {
          stack<char> stk;
          for(int i = 0; i < s.size(); i++){
              if(s[i] == '(' || s[i] == '{' || s[i] == '[')                 stk.push(s[i]);                          else if(stk.empty())                 return false;
              else if(s[i] == ')'){
                  if(stk.top() != '(')                     return false;                                  stk.pop();             }
              else if(s[i] == '}'){
                  if(stk.top() != '{')                     return false;                                  stk.pop();             }
              else{
                  if(stk.top() != '[')                     return false;                                  stk.pop();             }         }
          return stk.empty();              } };
  |