用栈判定三种括号是否匹配
遇到左括号时,在栈里弹入与左括号匹配的右括号,遇到右括号时,弹出栈里之前弹入的右括号
伪代码:
stack=[]//定义栈
对于item在给定字符串里:
如果item=='(':
栈里加入')'//stack.append('(')
如果item=='{':
栈里加入'}'//stack.append('}')
如果item=='[':
栈里加入']'//stack.append(']')
如果栈空或者栈弹出值不等于item://栈空时还有字符串,匹配不上;栈的弹出值不等于item,匹配不上
返回false
不然:
弹出栈中的值
返回True如果栈空不然返回False//整体判断栈中元素是否匹配
# 方法一,仅使用栈,更省空间
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for item in s:
if item == '(':
stack.append(')')
elif item == '[':
stack.append(']')
elif item == '{':
stack.append('}')
elif not stack or stack[-1] != item:
return False
else:
stack.pop()
return True if not stack else False
java版本:
class Solution {
public boolean isValid(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i);
//碰到左括号,就把相应的右括号入栈
if (ch == '(') {
deque.push(')');
}else if (ch == '{') {
deque.push('}');
}else if (ch == '[') {
deque.push(']');
} else if (deque.isEmpty() || deque.peek() != ch) {
return false;
}else {//如果是右括号判断是否和栈顶元素匹配
deque.pop();
}
}
//最后判断栈中元素是否匹配
return deque.isEmpty();
}
}