Python解析表达式:求解CodeWars‘Simple parenthesis removal’问题
问题分析
你的代码目前仅实现了移除括号的功能,但没有处理括号嵌套带来的运算符反转逻辑。规则是每进入一层括号,内部的所有运算符需要翻转(+变-,-变+),嵌套多层时每一层都会触发一次翻转。
解决方案
通过跟踪当前的符号状态(用一个变量记录是否需要翻转运算符)来实现需求:
- 初始化
sign = 1(1表示不翻转,-1表示需要翻转) - 遍历字符串中的每个字符:
- 遇到
(:翻转当前sign(sign *= -1) - 遇到
):再次翻转sign(退出括号时恢复上层的状态) - 遇到
+或-:根据当前sign决定输出的运算符 - 其他字符(字母)直接添加到结果中
- 遇到
修正后的代码
def solve(s): result = [] sign = 1 # 1表示正常,-1表示需要翻转运算符 for char in s: if char == '(': sign *= -1 elif char == ')': sign *= -1 elif char in '+-': # 根据sign决定输出的运算符 result.append(char if sign == 1 else ('-' if char == '+' else '+')) else: # 字母直接添加 result.append(char) return ''.join(result) print(solve("u-(v-w-(x+y))-z")) # 输出: u-v+w+x+y-z
代码解释
- 符号状态跟踪:
sign变量记录当前是否需要翻转运算符。每次进入或退出括号,都会翻转这个状态,因为括号内的运算符规则和外层完全相反。 - 运算符处理:当遇到
+或-时,根据sign的值决定输出原运算符还是翻转后的运算符。比如sign=-1时,+转为-,-转为+。 - 括号处理:遇到括号时仅修改
sign,不将括号本身添加到结果中,实现移除括号的同时完成运算符转换。
内容的提问来源于stack exchange,提问作者Abhijit Dey
相关产品推荐
相关产品推荐

