欢迎访问宙启技术站
智能推送

Java中如何编写一个函数来判断一个字符串是否是有效的括号匹配?

发布时间:2023-10-06 05:46:56

在Java中,可以使用栈来判断一个字符串是否是有效的括号匹配。下面是一个简单的函数实现:

import java.util.Stack;

public class ValidParentheses {
    public static boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else if (c == ')' && !stack.isEmpty() && stack.peek() == '(') {
                stack.pop();
            } else if (c == ']' && !stack.isEmpty() && stack.peek() == '[') {
                stack.pop();
            } else if (c == '}' && !stack.isEmpty() && stack.peek() == '{') {
                stack.pop();
            } else {
                return false;
            }
        }
        
        return stack.isEmpty();
    }
    
    public static void main(String[] args) {
        String s1 = "()"; // true
        String s2 = "()[]{}"; // true
        String s3 = "(]"; // false
        String s4 = "([)]"; // false
        String s5 = "{[]}"; // true
        
        System.out.println(isValid(s1)); // true
        System.out.println(isValid(s2)); // true
        System.out.println(isValid(s3)); // false
        System.out.println(isValid(s4)); // false
        System.out.println(isValid(s5)); // true
    }
}

在上述代码中,我们定义了一个栈 stack 来存储左括号。遍历字符串的每个字符,如果遇到左括号就将其压入栈中;如果遇到右括号,则判断栈是否为空且栈顶元素是否与当前右括号匹配,如果匹配则将栈顶元素出栈,否则返回 false。最后,检查栈是否为空,如果为空则说明所有括号都有匹配,返回 true;如果不为空,则说明有未匹配的括号,返回 false

对于输入的字符串,需要考虑一些特殊情况,比如空字符串。如果输入的字符串为空,则认为是有效的括号匹配,因此返回 true