6

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

4

2 回答 2

13

您不必评估整个表达式,但您确实需要将其拆分为标记,并且您必须知道每个运算符的化合价(即它需要多少个操作数)。为简单起见,设操作数的化合价为 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

用于一元减号的示例_

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)
于 2013-01-24T17:21:43.467 回答
0

您可以使用解析表来识别反向波兰符号。它需要查看每个字符,但速度很快。

于 2013-01-24T17:13:42.517 回答