检查输入String是否是正确的RPN表达式的最快方法是什么?

Str*_*tfw 6 algorithm

我遇到了一个任务,它会让你检查作为参数传递给你的方法/函数的String是否是反向波兰表示法中的正确语句.它可以包含小写字母,操作符号和整数.有没有更快的方法来检查它而不是分别阅读每个字符并实际尝试评估整个表达式?

ric*_*ici 11

您不必评估整个表达式,但是您需要将其拆分为标记,并且您必须知道每个运算符的效价(即,它需要多少个操作数).为简单起见,让操作数的效价为0; 然后执行以下操作:

Set stack_size to 0;
For Each token In expression:
    Set stack_size to stack_size + 1 - valence(token)
    If stack_size <= 0: Report failure
If stack_size == 1: Report success
Else              : Report failure
Run Code Online (Sandbox Code Playgroud)

_用于一元减去的例子.

expression:     3 4 + 1 * _
stack_size:   0 1 2 1 2 1 1 -> success

expression:     2 3 4 + 1 * _
stack_size:   0 1 2 3 2 3 2 2 -> failure (not 1 at the end)

expression:     2 3 + + 1 * _
stack_size:   0 1 2 1 0       -> failure (stack_size <= 0)
Run Code Online (Sandbox Code Playgroud)