3749. Evaluate Valid Expressions
You are given a string expression that represents a nested mathematical expression in a simplified form.
A valid expression is either an integer literal or follows the format op(a,b), where:
op is one of "add", "sub", "mul", or "div".
a and b are each valid expressions.
The operations are defined as follows:
add(a,b) = a + b
sub(a,b) = a - b
mul(a,b) = a * b
div(a,b) = a / b
Return an integer representing the result after fully evaluating the expression.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { long long parseDigit(string& s, int& p) { long long res = 0; while(p < s.length() and isdigit(s[p])) res = res * 10 + s[p++] - '0'; return res; } map<string, function<long long(long long, long long)>> ops; long long helper(string& s, int& p) { if(s[p] == '-') return -parseDigit(s,++p); if(isdigit(s[p])) return parseDigit(s,p); auto op = ops[{s[p],s[p+1],s[p+2]}]; p += 4; long long a = helper(s,p); p += 1; long long b = helper(s,p); p += 1; return op(a,b); } public: long long evaluateExpression(string expression) { int p = 0; ops["add"] = [](long long a, long long b) -> long long { return a + b; }; ops["sub"] = [](long long a, long long b) -> long long { return a - b; }; ops["mul"] = [](long long a, long long b) -> long long { return a * b; }; ops["div"] = [](long long a, long long b) -> long long { return a / b; }; return helper(expression,p); } };
|