有效的括号序列

描述

给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。

样例
括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。

考察点
  • 情况
    • 判空
    • 第一个字符为}]),需处理
    • 用List存储结构次序,最终为空则为正常
    • 移除对应括号
答案
public boolean isValidParentheses(String s) {
    // Write your code here
    List<Character> list = new ArrayList<>();
    if (s == null || s.equals(""))
        return true;

    int length = s.length();
    for (int i = 0; i < length; i++) {
        char c = s.charAt(i);
        int type = getCharType(c);
        if (type > 0) {
            list.add(c);
        } else if (type < 0) {
            if (list.size() == 0){
                return false;
            }
            Character character = list.get(list.size() - 1);
            if (getCharType(character) != -type) {
                return false;
            }
            list.remove(list.size() - 1);
        }
    }
    return list.size() == 0;
}

public int getCharType(char c) {
    if (c == '(') {
        return 1;
    }
    if (c == '[') {
        return 2;
    }
    if (c == '{')
        return 3;
    if (c == ')') {
        return -1;
    }
    if (c == ']') {
        return -2;
    }
    if (c == '}') {
        return -3;
    }
    return 0;
}