1、题目描述
2、代码详解
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
stack = []
pattern_map = {): (, }: {, ]: [}
for c in s:
if c not in pattern_map: # 如果左括号,压栈
stack.append(c)
elif stack == [] or pattern_map[c] != stack.pop(): # 如果右括号,先看栈是否为空,再看是否匹配
return False
return not stack # 判断最终栈是否为空
s1 = ([)]
s2 = {[]}
s = Solution()
print(s.isValid(s1))
print(s.isValid(s2))
import java.util.Stack;
public class IsValid_20 {
public static void main(String[] args){
String s = "{[]}";
System.out.println(isValid(s));
}
public static boolean isValid(String s){
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()){
if(c == ( || c == { || c == [) {
stack.push(c);
}
else {
if (stack.isEmpty())
return false;
char cStack = stack.pop();
boolean b1 = (c == ) && cStack != ();
boolean b2 = (c == } && cStack != {);
boolean b3 = (c == ] && cStack != [);
if (b1 || b2 || b3) // 如果不匹配
return false;
}
}
return stack.isEmpty();
}
}