给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s,判断字符串是否有效。
有效字符串需满足:
示例 1:
输入:s = “()” 输出:true
示例 2:
输入:s = “()[]{}” 输出:true
示例 3:
输入:s = “(]” 输出:false
可以使用栈来解决这个问题。遍历字符串,遇到左括号则入栈,遇到右括号则出栈。如果当前右括号与栈顶的左括号不匹配,则字符串无效。最后,如果栈为空,则字符串有效,否则无效。
import java.util.Stack;
public class ValidParentheses {
public boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
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 class Main {
public static void main(String[] args) {
ValidParentheses validParentheses = new ValidParentheses();
String s1 = "()";
System.out.println(validParentheses.isValid(s1)); // true
String s2 = "()[]{}";
System.out.println(validParentheses.isValid(s2)); // true
String s3 = "(]";
System.out.println(validParentheses.isValid(s3)); // false
}
}本题通过使用栈来判断字符串中的括号是否有效,实现了对字符串有效性的判断。这个算法思路清晰简单,在处理类似问题时是一个不错的选择。
除了当前算法,我们也可以考虑其他实现方式,例如使用递归、正则表达式等方法来解决类似问题。