20. 有效的括号
题目:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路:
栈:
我们遍历字符串中的所有字符
1.如果遇到了左括号,就把对应的右括号进栈(比如遇到了‘(’,就把字符‘)’进栈)
2.如果遇到了右括号
1)查看栈是否为空,如果为空,说明不能构成有效的括号,直接返回false。
2)如果栈顶不为空,栈顶元素出栈,然后判断出栈的元素是否等于这个右括号,如果不等于,说明不匹配,直接返回false。如果匹配,就继续判断字符串的下一个字符。
3.最后如果栈为空,说明是完全匹配,是有效的括号,否则如果栈不为空,说明不完全匹配,不是有效的括号。
代码:
class Solution {
public boolean isValid(String s) {
//过滤空字符串
if (s.isEmpty()) {
return true;
}
//创建一个辅助栈
Stack<Character> stack = new Stack<>();
//遍历
for (char c : s.toCharArray()) {
//如果是左括号,则把对应的右括号进栈
if (c == '(') {
stack.push(')');
}else if (c == '[') {
stack.push(']');
}else if (c == '{') {
stack.push('}');
}else if(stack.isEmpty() || stack.pop() != c) {
//如果是右括号
//1.如果栈为空,说明该括号无法匹配
/*2.如果栈不为空,栈顶元素出栈,和该右括号比较,
如果栈顶元素不等于这个右括号,说明无法匹配直接返回false */
return false;
}
}
//最后如果栈为空,说明完全匹配,是有效的括号
return stack.isEmpty();
}
}
转载:
如有冒犯请私信我删除
链接:https://leetcode.cn/problems/valid-parentheses/solution/shi-yong-zhan-lai-jie-jue-tu-wen-xiang-j-76oo/