📅  最后修改于: 2023-12-03 14:58:22.227000             🧑  作者: Mango
本题是2021年门考(GATE)计算机科学及相关专业的第一道编程题,编号为问题30。该题主要考察了解字符串处理和递归算法的能力。
题目要求实现一个函数 is_valid_expression(expression)
,接收一个表示算术表达式的字符串作为参数,判断该表达式是否合法。其中,表达式中允许包含以下符号:
该算法可以通过递归实现,主要分为以下几步:
以下是 Python 代码实现示例:
def is_valid_expression(expression):
# 1. 检查字符串是否为空
if not expression:
return False
# 2. 检查字符串是否只包含数字和算术符号
for char in expression:
if not char.isdigit() and char not in ['+', '-', '*', '/', '(', ')']:
return False
# 3. 检查表达式是否只包含一个数字
if expression.isdigit():
return True
# 4. 递归处理表达式中的子表达式
stack = []
for i in range(len(expression)):
if expression[i] == '(':
stack.append(i)
elif expression[i] == ')':
start = stack.pop()
if not is_valid_expression(expression[start+1:i]):
return False
# 5. 计算表达式中的算数运算
index = len(expression) - 1
while index >= 0:
if expression[index] in ['+', '-', '*', '/']:
left_exp = expression[:index]
right_exp = expression[index+1:]
if not is_valid_expression(left_exp) or not is_valid_expression(right_exp):
return False
break
index -= 1
else:
return False
return True
其中,第4步使用了栈的数据结构来处理括号,第5步的计算方法可以根据具体需求进行修改。