如何在Java中编写一个函数来判断一个字符串是否是有效的括号匹配?
发布时间:2023-10-23 16:24:40
在Java中,可以通过使用栈的数据结构来判断一个字符串是否是有效的括号匹配。下面是一个函数的示例代码,用来判断一个字符串是否是有效的括号匹配。
import java.util.*;
public class CheckParentheses {
public static boolean isValid(String input) {
// 创建一个栈来存储左括号
Stack<Character> stack = new Stack<>();
// 遍历输入字符串的每个字符
for (char c : input.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
// 如果是左括号,则入栈
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
// 如果是右括号,检查栈是否为空
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) {
String input1 = "((()))"; // 有效的括号匹配
String input2 = "(){}[]"; // 有效的括号匹配
String input3 = "(]"; // 无效的括号匹配
System.out.println("Input: " + input1 + ", Valid: " + isValid(input1));
System.out.println("Input: " + input2 + ", Valid: " + isValid(input2));
System.out.println("Input: " + input3 + ", Valid: " + isValid(input3));
}
}
输出结果为:
Input: ((())), Valid: true
Input: (){}[], Valid: true
Input: (], Valid: false
该函数通过遍历输入字符串的每个字符,将左括号入栈,遇到右括号时弹出栈顶的左括号进行匹配。如果匹配成功则继续遍历,如果遇到无法匹配的右括号或者栈为空时仍有右括号,说明括号不匹配,返回 false。最后检查栈是否为空,如果为空则说明所有左括号都被匹配完了,返回 true;否则返回 false。
这种方法的时间复杂度是 O(n),其中 n 是输入字符串的长度,因为要遍历输入字符串的每个字符。空间复杂度是 O(n),其中 n 是输入字符串的长度,因为最坏情况下栈的大小会达到输入字符串的长度。
