题目

20. 有效的括号

题解

代码

import java.util.*;

public class code20 {
    // public static final Map<Character, Character> map = new HashMap<Character,
    // Character>() {
    // {
    // put('{', '}');
    // put('[', ']');
    // put('(', ')');
    // }
    // };

    // public static boolean isValid(String s) {
    // if (s.length() > 0 && !map.containsKey(s.charAt(0))) {
    // return false;
    // }
    // Stack<Character> stack = new Stack<Character>();
    // char a[] = s.toCharArray();
    // for (int i = 0; i < a.length; i++) {
    // char c = a[i];
    // if (stack.isEmpty() || map.containsKey(c)) {
    // stack.push(a[i]);
    // } else if (map.get(stack.peek()) == c) {
    // stack.pop();
    // } else {
    // return false;
    // }
    // }
    // return stack.isEmpty();
    // }

    public static boolean isValid(String s) {
        char stack[] = new char[s.length() + 1];
        int top = 1;
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '[' || c == '{') {
                stack[top++] = c;
            } else if (c == ')' && stack[--top] != '(') {
                return false;
            } else if (c == ']' && stack[--top] != '[') {
                return false;
            } else if (c == '}' && stack[--top] != '{') {
                return false;
            }
        }
        return top == 1;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s = sc.next();
            boolean flag = isValid(s);
            System.out.println(flag);
        }
    }
}

参考

  1. 有效的括号——题解一
  2. Valid Parentheses 辅助栈法——题解二
  3. java数据结构与算法之栈(Stack)设计与实现
  4. Java Stack 类