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