Stack for deferred terms. Handle * and / immediately.
function calculate(s): stack = [] currNum = 0 prevOp = '+' for i in range(len(s)): char = s[i] if char.isdigit(): currNum = currNum * 10 + int(char) if char in "+-/" or i == len(s) - 1: if prevOp == '+': stack.push(currNum) elif prevOp == '-': stack.push(-currNum) elif prevOp == '': stack.push(stack.pop() * currNum) elif prevOp == '/': stack.push(int(stack.pop() / currNum)) prevOp = char currNum = 0 return sum(stack)
time, space.