Python字符串S表达式求值程序
假设我们有一个字符串s作为S表达式。我们必须对该S表达式进行求值,并将结果作为整数返回。众所周知,s表达式是一个表达式,它可以是一个数字,也可以是一个用括号括起来的递归表达式,例如(+ (- 3 2) (* 3 3)),表示(3 - 2) + (3 * 3) = 10。这里有效的运算符是+、-、*和/。
因此,如果输入类似于s = "(- (+ 3 2) 2)",则输出将为3,因为((3 + 2) - 2) = 3。
为了解决这个问题,我们将遵循以下步骤:
stack := 新建一个栈
移除s的开头和结尾括号
a := 使用空格分割s,并创建一个分区列表
对于a中的每个i,按逆序执行:
如果i的长度> 1,则:
如果i[0]与"-"相同,则:
将i作为整数压入栈
进行下一次迭代
否则:
将i作为整数压入栈
如果i是一个数字,则:
将i作为整数压入栈
否则:
如果栈的大小>= 2,则:
num1 := 从栈中弹出
num2 := 从栈中弹出
如果i与"+"相同,则:
执行num1 + num2并将结果压入栈
如果i与"-"相同,则:
执行num1 - num2并将结果压入栈
如果i与"*"相同,则:
执行num1 * num2并将结果压入栈
否则:
执行num1 / num2并将结果压入栈
返回栈顶元素,并移除栈顶元素
示例
让我们来看下面的实现来更好地理解:
class Solution: def solve(self, s): stack = list() s = s.replace("(", "") s = s.replace(")", "") a = s.split() for i in a[::-1]: if len(i) > 1: if i[0] == "-": stack.append(int(i)) continue else: stack.append(int(i)) elif i.isdigit(): stack.append(int(i)) else: if len(stack) >= 2: num1 = stack.pop() num2 = stack.pop() if i == "+": stack.append(int(num1 + num2)) elif i == "-": stack.append(int(num1 - num2)) elif i == "*": stack.append(int(num1 * num2)) else: stack.append(int(num1 / num2)) return stack.pop() ob = Solution() s = "(- (+ 3 2) 2)" print(ob.solve(s))
输入
s = "(- (+ 3 2) 2)"
输出
3
广告