[编程题] lc 20有效的括号-考察栈

[编程题] lc:20. 有效的括号-考察栈

题目描述

image-20200719232736405

输入输出例子

思路

image-20200719232819935

思路

使用栈结构,用map保存匹配键值对(LinkedList实现Deque接口模拟栈)

Java代码

class Solution {
    public boolean isValid(String s) {
        //借助栈
        Deque<Character> stack1 = new LinkedList<Character>();
        
        //用于备查的字典
        HashMap<Character,Character> map = new HashMap();
        map.put(')','(');
        map.put(']','[');
        map.put('}','{');

        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            //这里说明就是( [ {的情况就放入栈
            if(!map.containsKey(c)){
                stack1.push(c);
            }else{
                //如果判断是map的键中包含,就是右括号系列,就拿出栈顶比较
                if(stack1.isEmpty()){return false;} //边界,如果一开始栈中没东西,肯定就没左半部分匹配
                char top = stack1.peek();
                char value = map.get(c);
                if(top==value){
                    //把此元素出栈
                    stack1.pop();
                }else{
                    return false;
                }
            }
        }

        //遍历完字符串后,判断栈是否为空,为空则返回true,否则返回false
        if(stack1.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

输出:

image-20200719233000589

效率不咋好。

posted @ 2020-07-19 23:31  北鼻coder  阅读(220)  评论(0编辑  收藏  举报