【力扣】20. 有效的括号

有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 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);
    }
}

下面是第三种方法:代码随想录提供的解法

你可能感兴趣的:(Java相关,#,力扣及OJ,leetcode,java,算法)