[leetcode篇]20.有效的括号

好长时间都不更新leetcode题解了,博主今天忙里偷闲来解一下这个有关于栈知识的题目。
20.有效的括号:OJ链接
先看题目描述:

给定一个只包括 ‘(’,’)’’{’,’}’’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

示例 1: 输入:s = “()” 输出:true
示例 2:输入:s = “()[]{}” 输出:true
示例 3: 输入:s = “(]” 输出:false
示例 4:输入:s = “([)]” 输出:false
示例 5: 输入:s = “{[]}” 输出:true

解题想法:

  1. 第一步老样子判断传来的字符串是否为空,如果为空就返回null,判断传来的字符串是否为0,在题目中明确表明当字符串长度为0时,返回true;
  2. 第二步:这下就到重点了,有效括号,括号有左括号和右括号,并且要想办法看他们是否匹配。这里有一种方法利用栈的特性先进后出我们从字符串的左边遍历,把左括号压到栈中,然后在遍历下一个字符,如果下一个字符是右括号,那么就看看栈中的括号和我们遍历到的这个字符是否匹配(注意括号类型),如果匹配就把栈中的字符弹出,然后在遍历下一个字符串,重复循环,直到把字符串遍历完成。
  3. 我们在遍历字符串的过程中,可能会遇到左括号多,右括号少的情况,比如说(((()),那就是在两次匹配之后,我们把栈中的两个左括号都弹出,现在还有两个左括号,就直接判断栈是否为空,如果为不为空就返回false.
  4. 在我们遍左括号的过程中还会遇到,左括号少,右括号多的情况。 比如(())))还是一样的在我们两次匹配之后,右括号还剩余一个,所以我们现在要检查栈中是否还有左括号,如果没有就返回false.

案例一:当字符串为"{[()]}"
动图演示:
[leetcode篇]20.有效的括号_第1张图片
案例二:当字符串为"(){}[]"
动图演示:
[leetcode篇]20.有效的括号_第2张图片
案例三:当字符串为"(())))"
动图演示:
[leetcode篇]20.有效的括号_第3张图片

案例四:"(((())"
动图演示:
[leetcode篇]20.有效的括号_第4张图片
代码演示:

    public  static  boolean isValid(String s) {
     
        //先看传来的字符串是不是为空
        if(s.length() == 0){
     
            return true;
        }
        if(s == null){
     
            return false;
        }
        //创建一个栈,用来保存字符串中的左括号
        Stack<Character>stack = new Stack<>();
         for(int i = 0;i<s.length();i++){
     
             char ch = s.charAt(i);//获取每一个字符
             if(ch == '{' || ch == '[' || ch == '('){
     
                 stack.push(ch);
             }else if(stack.empty()){
     //右括号多
                 return false;
             } else{
     
                  char temp = stack.peek();
                  if(temp == '{' && ch == '}' || temp == '[' && ch == ']' || temp == '(' && ch == ')'){
     
                      stack.pop(); //如果匹配上了,那么就把这个原来在栈上的左括号弹出,查看下一个左括号和右括号是否匹配
                 }else{
     
                      return false;//左括号和右括号不匹配
                  }
             }
             //如果在匹配完之后,有右括号剩余
         }
         if(!stack.empty()){
      //如果在匹配完之后栈中还没有为空,那么证明左括号多了
             return false;
         }
         return true;
    }

你可能感兴趣的:(leetcode,leetcode)