有效的括号
- 描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
- 有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
- 例
输入:s = “()”
输出:true
- 代码
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();//实例化一个栈空间 先进后出的形式
for (char c : s.toCharArray()) {
//用迭代器便利,用 . toCharArray() 将 s 转换为数组
if (c == '(' || c == '{' || c == '[') {
// 判断,如果是左括号,则压入栈中
stack.push(c);
//进栈 结束本次循环(具体是指怎么实现的我也没看懂,有知道大佬,望评论区留言)
} else if (c == ')' || c == '}' || c == ']') {
// 判断 如果是右括号,则需要检查栈是否为空以及栈顶的左括号是否与当前的右括号匹配
if (stack.isEmpty()) {
// 栈为空,说明不可能有对应的左括号,
//字符串无效
return false;
}
char topChar = stack.pop(); //出栈
// 弹出栈顶的左括号并返回一个 char 的值
//这里用 toChar 接收
if ((c == ')' && topChar != '(') || (c == '}' && topChar != '{') || (c == ']' && topChar != '[')) {
// 判断 则个出栈的 字符 是否匹配,和这个如果不匹配,字符串无效
return false;
}
}
}
// 遍历完所有字符后,检查栈是否为空
return stack.isEmpty();
}
- 用到的包
- java.util.Stack;
- Stack
- 方法