题目
思路:
先把符号输入字典,每对符号的左半边设置为位置,右半边设置为值,方便后续进行比对。
利用出入栈的思想,设置栈stack
,将字符串中的值c
push入栈直至c
不在字典里。然后再将栈里的值pop出来与c
对比,注意此时pop出来的值是字典的位置索引dic[stack.pop()]
,所对应的值应该是符号的右半边。如果此时dic[stack.pop()]
与c
不相等,则说明不是一对,返回false
。
解法:
def isValid( s: str) -> bool:
dic = {'{': '}', '[': ']', '(': ')', '?': '?'}
stack = ['?']#栈为空时stack.pop()会报错,这里赋一个初值防止报错。
for c in s:
if c in dic: stack.append(c)
elif dic[stack.pop()] != c: return False
return len(stack) == 1
print(isValid("([)]"))