有效的括号(四 9.1)

62 阅读1分钟

有效的括号(四 | 9.1)

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

思路

  1. 导入必要的包:

    import java.util.Stack;
    

    这里导入了Java的Stack类,用于实现栈数据结构。

  2. 创建isValid方法:

    public boolean isValid(String s) {
    

    这个方法接受一个字符串 s 作为输入,并返回一个布尔值,表示字符串是否包含有效的括号匹配。

  3. 创建一个栈来存储左括号:

    Stack<Character> stack = new Stack<>();
    

    在这里,我们创建了一个Stack对象,用于存储字符类型的元素,即左括号。

  4. 遍历字符串的每个字符:

    javaCopy code
    for (char c : s.toCharArray()) {
    

    我们使用for-each循环遍历输入字符串 s 中的每个字符。

  5. 如果字符是左括号,将其压入栈中:

    if (c == '(' || c == '{' || c == '[') {
        stack.push(c);
    }
    

    如果当前字符是 '(''{''[' 中的任意一个,那么它是一个左括号,我们将其压入栈中。

  6. 如果字符是右括号,检查栈是否为空:

    else {
        if (stack.isEmpty()) {
            return false; // 没有对应的左括号
        }
    }
    

    如果当前字符是右括号,我们首先检查栈是否为空,如果栈为空,说明没有对应的左括号,因此字符串无效,返回false

  7. 弹出栈顶元素并检查是否匹配:

    char top = stack.pop();
    if (c == ')' && top != '(' ||
        c == '}' && top != '{' ||
        c == ']' && top != '[') {
        return false; // 括号不匹配
    }
    

    如果栈不为空,我们从栈中弹出栈顶元素,并检查当前右括号字符与弹出的左括号是否匹配。如果它们不匹配,说明括号不正确闭合,返回false

  8. 最后,检查栈是否为空:

    return stack.isEmpty();
    

    如果在遍历完整个字符串后,栈为空,说明所有括号都正确闭合,返回true,否则返回false

main 方法中,我们使用了示例字符串 s1s2 进行测试,以验证isValid方法的功能。

import java.util.Stack;

public class ValidParentheses {
    public boolean isValid(String s) {
        // 创建一个栈来存储左括号
        Stack<Character> stack = new Stack<>();
        
        // 遍历字符串的每个字符
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                // 如果是左括号,将其压入栈中
                stack.push(c);
            } else {
                // 如果是右括号,检查栈是否为空
                if (stack.isEmpty()) {
                    return false; // 没有对应的左括号
                }
                
                // 弹出栈顶元素,检查是否匹配
                char top = stack.pop();
                if (c == ')' && top != '(' ||
                    c == '}' && top != '{' ||
                    c == ']' && top != '[') {
                    return false; // 括号不匹配
                }
            }
        }
        
        // 最后检查栈是否为空,如果为空说明所有括号都正确闭合
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        ValidParentheses solution = new ValidParentheses();
        String s1 = "([{}])"; // 有效字符串
        String s2 = "([)]";   // 无效字符串
        System.out.println(solution.isValid(s1)); // 输出 true
        System.out.println(solution.isValid(s2)); // 输出 false
    }
}