首页 > 技术文章 > 有效括号--算法

saoge 2020-09-17 21:53 原文

 public boolean isValid(String userStr) {
        if(userStr.length() % 2 != 0){
            return false;
        }
        //创建hashMap对象
        HashMap<Character, Character> map = new HashMap<>();
        //存值
        map.put(')', '(');
        map.put(']', '[');
        map.put('}', '{');
        //创建栈对象
        Stack<Character> stack = new Stack<>();
        //判断传进来的值是否是括号
        //将字符串转成char数组,遍历
        for (char c : userStr.toCharArray()) {
            //集合中是否包含该对应的键
            if (map.containsKey(c)) {
                //有就说明接收到了右括号,要检测栈最上面的是否和改键的值相同,
                // 判断栈是否为空与最上面的是否和改键的值相同,
                if (stack.isEmpty() || stack.peek() != map.get(c)) {
                    //满足以上情况,就说明不存在,返回一个false
                    return false;
                }
                //否则就说明存在
                //就将最顶上的栈弹出
                stack.pop();

            } else {
                //如果是左括号就压进栈中
                stack.push(c);
            }
        }
        //执行完以上算法,栈就变空了
        //所以这里判断一下就可以了
        return stack.isEmpty();
    }

推荐阅读