题目描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

解析:
1.用栈实现括号匹配:
依次扫描所有字符,遇到左括号入栈,遇到右括号则弹出栈顶元素检查是否匹配。
2.匹配失败情况:

  • 左括号多
  • 右括号多
  • 左右括号不匹配
    import java.util.*;
    import java.util.Stack;
    public class Solution {
      /**
       * 
       * @param s string字符串 
       * @return bool布尔型
       */
      public boolean isValid (String s) {
          // write code here
          Stack<Character> stack=new Stack<Character>();
          if(s.length()==0 || s==null){
              return false;
          }
          for(int i=0;i<s.length();i++){
              char c=s.charAt(i);
              if( c=='(' || c=='[' || c=='{'){
                  stack.push(c);
              }
              else{
                  if(stack.isEmpty()){
                      return false;
                  }
                  char topchar=stack.pop();
                  if(c==')' && topchar!='('){
                      return false;
                  }
                  if(c==']' && topchar!='['){
                      return false;
                  }
                  if(c=='}' && topchar!='{'){
                      return false;
                  }
              }
          }
          //如果遍历完字符串后,栈不为空,则说明括号不匹配
          return stack.isEmpty();
      }
    }