【Leetcode-Easy-20】 Valid Parentheses

来源:互联网 发布:双拼net域名行情 编辑:程序博客网 时间:2024/04/30 22:44

【Leetcode-Easy-20】 Valid Parentheses

题目

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

思路

程序

class Solution {    public boolean isValid(String s) {        LinkedList<String> stack  = new LinkedList<>();        HashSet<String> set = new HashSet<>();        set.add("(");        set.add("[");        set.add("{");        for (int i = 0; i < s.length(); i ++){            String part = s.charAt(i) + "";            if (set.contains(part)) stack.push(part);            else{                if (stack.isEmpty()) return false;                String prepart = stack.pop();                if ("}".equals(part) && !"{".equals(prepart) ||                    ")".equals(part) && !"(".equals(prepart) ||                    "]".equals(part) && !"[".equals(prepart)){                    return false;                }            }        }        return stack.isEmpty();    }}

更为巧妙的解法

public boolean isValid(String s) {    Stack<Character> stack = new Stack<Character>();    for (char c : s.toCharArray()) {        if (c == '(')            stack.push(')');        else if (c == '{')            stack.push('}');        else if (c == '[')            stack.push(']');        else if (stack.isEmpty() || stack.pop() != c)            return false;    }    return stack.isEmpty();}