非独立思考

    1. class Solution {
    2. public boolean isValid(String s) {
    3. if (s.length() % 2 == 1) {
    4. return false;
    5. }
    6. Stack stack = new Stack();
    7. // 用各种if else太蠢,精巧的设计:
    8. // 为了快速判断括号的类型可以使用哈希表存储每一种括号。
    9. // 哈希表的键为右括号,值为相同类型的左括号。
    10. // 想要用左括号匹配有括号,那么每次需要判断栈中有无左括号匹配右括号
    11. Map<Character, Character> map = new HashMap<>(16);
    12. map.put(')', '(');
    13. map.put(']', '[');
    14. map.put('}', '{');
    15. for (int i = 0; i < s.length(); i++) {
    16. char curChar = s.charAt(i);
    17. if (map.containsKey(curChar)) {
    18. // 如果当前栈中无内容,肯定返回false,因为来的是右括号。
    19. // 如果栈顶的无法匹配上相应的右括号,也返回false,因为不服题意。
    20. if (stack.size() == 0 || stack.peek() != map.get(curChar)) {
    21. return false;
    22. }
    23. stack.pop();
    24. } else {
    25. stack.add(curChar);
    26. }
    27. }
    28. return stack.size() == 0;
    29. }
    30. }