15_20. 有效的括号


题目描述:

解题思路:

  • 利用栈,遇到左括号入栈,有括号就出栈,查看二者是否匹配。对java了解的不深入,不知道有自带的栈,自己写了链表实现的栈。
  • 题解是利用栈,java有自带的栈结构,而且可以使用HashMap来匹配左右括号,不需要if条件判断。

代码:

自己实现的栈
//自己实现的栈
class Solution {
    public boolean isValid(String s) {
        if (s == null) {
            return true;
        }
        int len = s.length();
        Stack stack = new Stack();
        for (int i = 0; i < len; i++) {
            char c = s.charAt(i);
            swtich (c){
                case c.equal('(') :
                    stack.push(c);
                    break;
                case c == '[' :
                    stack.push(c);
                    break;
                case c == '{' :
                    stack.push(c);
                    break;
                defalut :
                    if (stack.isEmpty()) {
                        return false;
                    }
                    ListNode node = stack.pop();
                    if (c == '(' && node.val == ')'){

                    }else if (c == '[' && node.val == ']'){
                        
                    }else if (c == '{' && node.val == '}'){
                        
                    }else {
                        return false;
                    }
                    break;

            }
        }
        if (stack.isEmpty()){
            return true;
        }
        return false;
    }

}

class Stack {
    ListNode top;
    Stack (){};
    Stack (ListNode top) {
        this.top = top;
    }

    private boolean push (String s) {
        ListNode node = new ListNode(s);
        node.next = top;
        top = node;
    }

    private  boolean isEmpty (){
        if (top == null){
            return true;
        }
        return false;
    }

    private ListNode pop (){
        if (isEmpty) {
            return null;
        }
        ListNode node = pop;
        pop = pop.next;
        return node;

    }


}

class ListNode {
    String val;
    ListNode next;
    ListNode (){};
    ListNode (String val){
        this.val = val;
    }
    ListNode (String val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
题解中的栈和HashMap
//题解中的栈和HashMap
class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if (n % 2 != 0) {
            return false;
        }
        HashMap pairs = new HashMap<>();
        pairs.put(')','(');
        pairs.put('}','{');
        pairs.put(']','[');

        Deque stack = new LinkedList();
        for (int i = 0; i < n; i++){
            char ch = s.charAt(i);
            if (pairs.containsKey(ch)){
                if (stack.isEmpty() || stack.peek() != pairs.get(ch)){
                    return false;
                }
                stack.pop();
            }else {
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }

}