LeetCode_20_有效的括号数

2020-02-07  本文已影响0人  NWPU_HaiboWu

1.题目描述

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

2.思路分析

这个题,我上编译原理课的时候,有做过类似的工作,所以印象比较深。我们大致要考虑到一下几个点:
①为了判断一致性,我们可以用HashMap来存放一堆括号
②在判断的开始:
(1)字符串的长度一定要是2的倍数
(2)一定是要先有左括号,再有右括号
③这种先进后比较的方式,————栈结构
(1)如果当前是左括号,进栈
(2)如果当前是右括号,出栈,进行比较
(3)判断完所有的字符,如果栈中没有元素,则返回true
注意:这里有一个空指针异常,如果当前是右括号,没有元素能够出栈,预先判断!

3.代码实现

 public boolean isValid(String s) {
          
          if(s.length()%2!=0)return false;
          boolean flag = true;
        Map<Character, Character> hashMap = new HashMap<>();
        hashMap.put('(', ')');
        hashMap.put('[', ']');
        hashMap.put('{', '}');

        Stack<Character> stack = new Stack();

        
        for (int i = 0; i < s.length(); i++) {
            if(stack.isEmpty()&&!hashMap.containsKey(s.charAt(i))){
                flag=false;
                return flag;
            }
            if(hashMap.containsKey(s.charAt(i))){
                stack.push(s.charAt(i));
            }else{
                if(hashMap.get(stack.pop())==s.charAt(i)){
                    continue;
                }else {
                    flag=false;
                    return flag;
                }
            }
        }
        if(!stack.isEmpty()){
            flag=false;
        }
        return flag;
    }
上一篇 下一篇

猜你喜欢

热点阅读