输入一个算术表达式,其中包含两种括号:圆括号“()”和方括号“[]”,嵌套顺序任意,编写一个算法用于判别表达式中括弧是否能够正确匹配。
时间: 2023-10-21 22:03:35 浏览: 105
可以使用栈来解决这个问题。从左到右扫描表达式,遇到左括号时将其压入栈中,遇到右括号时将其与栈顶元素进行匹配,如果匹配成功则将栈顶元素弹出,否则括号不匹配,返回false。如果扫描完整个表达式后栈为空,则说明所有括号都匹配成功,返回true,否则返回false。
以下是一个示例代码实现:
```python
def is_valid_expression(s):
stack = []
for c in s:
if c in '([{':
stack.append(c)
elif c in ')]}':
if not stack:
return False
if c == ')' and stack[-1] != '(' or \
c == ']' and stack[-1] != '[' or \
c == '}' and stack[-1] != '{':
return False
stack.pop()
return not stack
```
示例输入:
```python
s = '[(5+3)*2-(1-3)]'
print(is_valid_expression(s)) # True
s = '{[(3+1)+2]+}'
print(is_valid_expression(s)) # True
s = '(3+{1-1)}'
print(is_valid_expression(s)) # False
s = '2*(8-{3+2*(1+1)})'
print(is_valid_expression(s)) # True
```
输出结果:
```
True
True
False
True
```
阅读全文