BM44 有效括号序列

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

数据范围:字符串长度 Java练习题—堆/栈/队列(三)_字符串

要求:空间复杂度 Java练习题—堆/栈/队列(三)_字符串_02,时间复杂度 Java练习题—堆/栈/队列(三)_字符串_02

示例1

输入:

"["

返回值:

false

解析:

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here

        String[] split = s.split(",");
        int length = split.length;
        if (length == 1 ) {
            return false;
        } else {
            if (length % 2 != 0) {
                return false;
            } else {
                boolean flag  = true;
                int i = 0;

                while (flag) {
                    if (split[i] == "(") {
                        if (split[i + 1] == ")") {
                            flag =  true;
                        } else flag = false;
                    } else if (split[i] == "[") {
                        if (split[i + 1] == "]") {
                            flag = true;
                        } else flag = false;
                    } else if (split[i] == "{") {
                        if (split[i + 1] == "}") {
                            flag = true;
                        } else flag = false;
                    } else flag = false;
                }
                return flag;
            }
        }
    }
}
import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        Deque<Character> deque = new ArrayDeque<Character>();
        // s = s.substring(1, s.length() - 1);
        System.out.println(s);
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '{') {
                deque.push(c);
            } else {
                if (deque.size() == 0) {
                    return false;
                }
                char c1 = deque.pop();
                String str = c1 + "" + c;
                if (!(str.equals("()") || str.equals("[]") || str.equals("{}"))) {
                    return false;
                }
            }
        }
        return deque.size() == 0 ? true : false;
    }
}
import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        if (s.length() == 0 || s.length() % 2 == 1) {
            return false;
        }
        if (s.charAt(0) == ')' || s.charAt(0) == '}' || s.charAt(0) == ']') {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
                stack.push(s.charAt(i));
            } else {
                Character pop = stack.pop();
                if (s.charAt(i) == ')' && pop != '(') {
                    return false;
                }
                if (s.charAt(i) == '}' && pop != '{') {
                    return false;
                }
                if (s.charAt(i) == ']' && pop != '[') {
                    return false;
                }
            }
        }
        return stack.size() == 0;
    }
}