[LeetCode] Evaluate Valid Expressions

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);
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2025/11/21/PS/LeetCode/evaluate-valid-expressions/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.