给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
    有效字符串需满足:

    • 左括号必须用相同类型的右括号闭合。
    • 左括号必须以正确的顺序闭合。

    示例 1:

    1. 输入:s = "()"
    2. 输出:true

    示例 2:

    1. 输入:s = "()[]{}"
    2. 输出:true

    示例 3:

    1. 输入:s = "(]"
    2. 输出:false

    示例 4:

    1. 输入:s = "([)]"
    2. 输出:false

    示例 5:

    1. 输入:s = "{[]}"
    2. 输出:true

    提示:

    • 1 <= s.length <= 10
    • s 仅由括号 '()[]{}' 组成

    我的写法:

    1. class Solution {
    2. public boolean isValid(String s) {
    3. Stack<Character> stack = new Stack<>();
    4. HashMap<Character, Character> map = new HashMap<>();
    5. map.put('(',')');
    6. map.put('{','}');
    7. map.put('[',']');
    8. for (int i = 0; i < s.length(); i++) {
    9. char c = s.charAt(i);
    10. if (map.containsKey(c)) {
    11. stack.push(map.get(c));
    12. continue;
    13. }
    14. if (stack.isEmpty()||c!=stack.pop()){
    15. return false;
    16. }
    17. }
    18. return stack.isEmpty();
    19. }
    20. }

    大神的写法:

    1. class Solution {
    2. public boolean isValid(String s) {
    3. //由题意,s!=null, s.length>=1
    4. // if (s.length() == 0) {
    5. // return true;
    6. // }
    7. char[] stack = new char[s.length()];
    8. int head = 0;
    9. for (char c : s.toCharArray()) {
    10. switch(c) {
    11. case '(': stack[head++] = ')';break;
    12. case '[': stack[head++] = ']';break;
    13. case '{': stack[head++] = '}';break;
    14. default:
    15. if (head == 0 || stack[--head] != c) {
    16. return false;
    17. }
    18. }
    19. }
    20. return head == 0;
    21. }