NC52:括号匹配的检验:

括号序列

http://www.nowcoder.com/questionTerminal/37548e94a270412c8b9fb85643c8ccc2

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

解析:
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();
      }
    }
名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论

相关推荐

01-17 08:34
门头沟学院 Java
想找对象的单身狗在努力存钱:这工资不低了,再高点人家要招博士硕士的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务