package com.example.demo.leecode;
import java.util.Stack;
/**
 * 合理的括号
 * @Date 2020/12/10
 * @author Tang
 *
 * 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
 * 有效字符串需满足:
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 * 注意空字符串可被认为是有效字符串。
 */
public class ValidParentheses {
    private Stack<Character> stack = new Stack();
    public boolean execute(String s){
        if(s == null || "".equals(s.trim())){
            return false;
        }
        char[] chars = s.toCharArray();
        for(char c : chars){
            if(ifMatching(c)){
                stack.pop();
                continue;
            }
            stack.push(c);
        }
        return stack.size() == 0;
    }
    /**
     * 是否匹配上栈中上一个字符
     * @param c
     * @return
     */
    private boolean ifMatching(char c){
        if(stack.size() == 0){
            return false;
        }
        switch (stack.peek()){
            case '{':
                return c == '}';
            case '(':
                return c == ')';
            case '[':
                return c == ']';
            default:
                return false;
        }
    }
    public static void main(String[] args) {
        String value = "{(]}";
        boolean result = new ValidParentheses().execute(value);
        System.out.println(result);
    }
}