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。
