给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
    有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    示例 1:
    输入: “()”
    输出: true

    示例 2:
    输入: “()[]{}”
    输出: true

    示例 3:
    输入: “(]”
    输出: false

    示例 4:
    输入: “([)]”
    输出: false

    示例 5:
    输入: “{[]}”
    输出: true

    法一:栈
    挨着入栈,然后配对判断

    1. class Solution {
    2. public boolean isValid(String s) {
    3. Stack<Character> stack = new Stack<>();
    4. for(char c : s.toCharArray()) {
    5. if(c=='{'||c=='['||c=='(') {
    6. stack.push(c);
    7. }else {
    8. if(stack.isEmpty()) {
    9. return false;
    10. }
    11. char top = stack.pop();
    12. if(c=='}'&&top!='{' || c==']'&&top!='[' || c==')'&&top!='(') {
    13. return false;
    14. }
    15. }
    16. }
    17. return stack.isEmpty();
    18. }
    19. }
    20. /*
    21. class Solution {
    22. public boolean isValid(String s) {
    23. if(s.isEmpty()) return true;
    24. Stack<Character> stack=new Stack<>();
    25. for(char c:s.toCharArray()){
    26. if(c=='(')
    27. stack.push(')');
    28. else if(c=='{')
    29. stack.push('}');
    30. else if(c=='[')
    31. stack.push(']');
    32. else if(stack.empty() || c != stack.pop())
    33. return false;
    34. }
    35. return stack.empty();
    36. }
    37. }
    38. */

    20. 有效的括号(栈)1 - 图1