我遇到了一个任务,它可以检查作为参数传递给您的方法/函数的字符串是否为逆波兰表示法中的正确语句。它可以包含小写字母,操作符号和整数。有没有更快的方法来检查它,而不是单独阅读每个字符,并尝试评估整个表达式?检查输入字符串是否是正确的RPN表达式的最快方法是什么?
6
A
回答
8
您不必评估整个表达式,但需要将其分解为令牌,并且必须知道每个运算符的价数(即需要多少操作数)。为简单起见,让一个操作数的价数为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)
0
0
Wikipedia有一个很好的算法来解析表达式。除非表达无效(在这种情况下你可能会提前终止),否则你不可能比O(n)做得更好。也就是说,您必须评估字符串中的所有标记以确保其有效。
相关问题
- 1. 如何检查输入字符串是否是有效的正则表达式?
- 2. Tcl:什么是检查空白字符串的最快方法
- 3. 在Perl中检查字符串是否为空的正确方法是什么?
- 4. 检查是否可以解析字符串的最快方法
- 5. 检查字符串是否是字符串列表中的子字符串的最快方法
- 6. 什么是检查文件是否改变的最快方法?
- 7. 什么是正确的正则表达式该字符串
- 8. 什么是从字符串检索值的最快方法?
- 9. 什么是向系统输出字符串的最快方法?
- 10. 检查字符串是否是格式正确的xml
- 11. 什么是我的字符串准确的正则表达式?
- 12. 检查另一个字符串是否存在的最佳方法是什么?
- 13. 检查字符串是否是bcrypt散列的最简单快捷的方法是什么?
- 14. 什么是检查字符串是否是更大字符串的一部分的最有效方法?
- 15. 什么是检查Excel OLE是否可用的正确方法?
- 16. 检查一个字符串是否包含Python 3中重复字符的最快方法是什么?
- 17. 检查字符串是否正确
- 18. 检查输入是否为字符串的方法
- 19. 这些字符串的正确检查语法是什么?
- 20. 什么是Java中正确的方式来检查符号的字符串®?
- 21. 确保字符串是给定格式的正则表达式是什么?
- 22. 如何确定字符串是否不是正则表达式?
- 23. 什么是最快的方式来检查字符串是否在C#中有大写字母?
- 24. 检查两个给定数字是否互反的最快方法是什么?
- 25. 检查字符串是否包含正则表达式匹配
- 26. 检查字符串是否像正则表达式
- 27. 检查字符串是否以Java结尾(正则表达式)
- 28. 正则表达式来检查字符串是否有效XML
- 29. 正则表达式来检查字符串是否有效
- 30. 检查字符串是否以正则表达式开始
非常好。非常感谢! :) – Straightfw