如何在Java中高效地(优化运行时,但同时保持空间最小化)解析和求值一个单数字算术表达式。
以下算术表达式均为有效的:
eval("-5")=-5
eval("+4")=4
eval("4")=4
eval("-7+2-3")=-8
eval("5+7")=12
我的做法是遍历所有元素,使用一个标志跟踪当前的算术操作,并逐位计算。
public int eval(String s){
int result = 0;
boolean add = true;
for(int i = 0; i < s.length(); i++){
char current = s.charAt(i);
if(current == '+'){
add = true;
} else if(current == '-'){
add = false;
} else {
if(add){
result += Character.getNumericValue(current);
} else {
result -= Character.getNumericValue(current);
}
}
}
return result;
}
这是唯一的最优解吗?我曾试过使用栈来跟踪算术运算符,但我不确定这是否更有效。我也没有尝试正则表达式。我之所以问,是因为我在面试中给出了上述解决方案,但被告知它并不是最优解。
new ScriptEngineManager().getEngineByExtension("js").eval("-7+4")
。 - sgbj