20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
这个题是括号匹配问题。栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。
思路:
从前向后扫描字符串:遇到左括号X,就压栈x
遇到右括号y:
如果发现栈顶元素x和该括号y匹配,则栈顶元素出栈,继续判断下一个字符;
如果栈顶元素x和该括号不匹配,字符串不匹配,
如果栈为空,字符串不匹配
扫描完成后,如果栈恰好为空,则字符串匹配,否则,字符串不匹配
class Solution:
def isValid(self, s: str) -> bool:
# 栈
stack =[]
# 从左到右扫描
for ch in s:
# 如果碰到左括号,则压入栈
if ch in ['(','{','[']:
stack.append(ch)
else:
# 如果碰到右括号,则弹出栈顶元素与右括号进行比较
if stack:
left = stack.pop()
else:
return False
if left == '(' and ch == ')' or left == '[' and ch == ']' or left == '{' and ch == '}':
continue
else:
return False
if stack == []:
return True
else:
return False
四则表达式求值
这里需要用到后缀表示法。在后缀表示法中,所有的符号都是在要运算数字的后面出现。那么后缀表达式是如何得来的呢?
规则:从左到右遍历中缀表达式每个数字和符号,
若是数字就输出,即成为后缀表达式的一部分;
若是符号,则