Algorithm 什么';检查输入字符串是否为正确的RPN表达式的最快方法是什么?

Algorithm 什么';检查输入字符串是否为正确的RPN表达式的最快方法是什么?,algorithm,Algorithm,我遇到了一个任务,它让您检查作为参数传递给方法/函数的字符串是否是反向波兰符号意义上的正确语句。它可以包含小写字母、运算符号和整数。有没有比单独读取每个字符并实际计算整个表达式更快的检查方法?您可以使用解析表来识别反向波兰符号。它需要查看每个字符,但速度很快。不必计算整个表达式,但需要将其拆分为标记,并且必须知道每个运算符的值(即需要多少个操作数)。为简单起见,让操作数的价为0;然后执行以下操作: Set stack_size to 0; For Each token In expression

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

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

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