有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
 有效字符串需满足:
 左括号必须用相同类型的右括号闭合。
 左括号必须以正确的顺序闭合。
 每个右括号都有一个对应的相同类型的左括号。
示例 1:
 输入:s = “()”
 输出:true
 示例 2:
 输入:s = “()[]{}”
 输出:true
 示例 3:
 输入:s = “(]”
 输出:false
提示:
 1  
     
      
       
       
         < 
        
       
         = 
        
       
      
        <= 
       
      
    <= s.length  
     
      
       
       
         < 
        
       
         = 
        
       
      
        <= 
       
      
    <=  
     
      
       
       
         1 
        
        
        
          0 
         
        
          4 
         
        
       
      
        10^4 
       
      
    104
 s 仅由括号 ‘()[]{}’ 组成
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Stack;
class Solution {
    public boolean isValid(String s) {
        //用于匹配的map,键为左括号,值是右括号
        HashMap<Character, Character> hashMap = new HashMap<Character, Character>();
        hashMap.put(')', '(');
        hashMap.put(']', '[');
        hashMap.put('}', '{');
        //建栈
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (stack.isEmpty()) {
                stack.add(c);
            }
            else if (c == '(' || c == '[' || c == '{') {
                stack.add(c);
            }
            else if( !stack.pop().equals(hashMap.get(c))) {
                return false;
            }
        }
        if (stack.isEmpty()) {
            return true;
        }
        else {
            return false;
        }
    }
    public boolean isValid2(String s) {
        while (true) {
            //长度
            int l = s.length();
            s = s.replace("()", "");
            s = s.replace("{}", "");
            s = s.replace("[]", "");
            if (s.length() == l) {
                return l == 0;
            }
        }
    }
    public boolean isValid3(String s) {
        Deque<Character> deque = new LinkedList<>();
        char ch;
        for (int i = 0; i < s.length(); i++) {
            ch = s.charAt(i);
            //碰到左括号,就把相应的右括号入栈
            if (ch == '(') {
                deque.push(')');
            }else if (ch == '{') {
                deque.push('}');
            }else if (ch == '[') {
                deque.push(']');
            } else if (deque.isEmpty() || deque.peek() != ch) {
                return false;
            }else {//如果是右括号判断是否和栈顶元素匹配
                deque.pop();
            }
        }
        //最后判断栈中元素是否匹配
        return deque.isEmpty();
    }
}
public class Main {
    public static void main(String[] args) {
        Solution solution = new Solution();
        Boolean result = solution.isValid("()");
        System.out.println(result);
    }
}
 
下面是第三种方法:代码随想录提供的解法
 



















