题目解析
正则解法:
这个题目保证不会出现非法的求值报文,因此输入字符串是严格的“数字+操作符+数字”这种格式,因此,很适合使用正则去匹配。
首先,我先用正则匹配出"操作数#操作数",然后将其替换为计算后的值,然后字符串中就只剩$了,因此再将字符串按照$分割,从左到右,两两操作计算。
最终就得到了题解。
本题需要注意的是,当替换"操作数#操作数",为其结果值时,只能进行首次匹配替换,不能多次匹配替换。
比如"4#3#4#3",首先计算出4#3的值为27,这里替换只能将第一次出现的4#3替换为27,而不能将所有4#3替换为27,因为这两种替换的结果可能会不同,比如
- 只替换第一次匹配:27#4#3
- 全部匹配替换:27#27
的结果是不同的,而本题中#必须是从左到右计算。
这里不同语言的字符串首次匹配替换的API功能各有差异:
JS | replace |