每周一个小算法-有效的括号

2020-12-03  本文已影响0人  小左伯爵
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true

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

示例 3:
输入: "(]"
输出: false

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

示例 5:
输入: "{[]}"
输出: true
package cn.itbin.demo03;

import java.util.Stack;

/**
 * @author chenxiaogao
 * @className Kuohao
 * @description TODO
 * @date 2020/12/3
 **/
public class IsValid {
    public static void main(String[] args) {
        String s = "(){}}{";
        boolean valid = isValid1(s);
        System.out.println("valid = " + valid);

    }

    public static boolean isValid(String s) {
        if (s.length() == 0) {
            return true;
        }
        Stack<Character> stack = new Stack<Character>();
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else {
//如果栈中没有左括号,直接返回false
                if (stack.empty()) {
                    return false;
                } else {
                    Character pop = stack.pop();
//如果当前为),并且栈中不为(,返回false
                    if (c == ')') {
                        if (pop != '(') {
                            return false;
                        }
                    } else if (c == ']') {
                        if (pop != '[') {
                            return false;
                        }
                    } else if (c == '}') {
                        if (pop != '{') {
                            return false;
                        }
                    }
                }
            }
        }
        return stack.isEmpty();
    }

    public static boolean isValid1(String s) {
        int i = s.length() / 2;
        for (int i1 = 0; i1 < i; i1++) {
            s = s.replace("()", "").replace("[]", "").replace("{}", "");
        }
        return s.length() == 0;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读