You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
代码解释
  1. 符号状态跟踪:sign变量记录当前是否需要翻转运算符。每次进入或退出括号,都会翻转这个状态,因为括号内的运算符规则和外层完全相反。
  2. 运算符处理:当遇到+或-时,根据sign的值决定输出原运算符还是翻转后的运算符。比如sign=-1时,+转为-,-转为+。
  3. 括号处理:遇到括号时仅修改sign,不将括号本身添加到结果中,实现移除括号的同时完成运算符转换。

内容的提问来源于stack exchange,提问作者Abhijit Dey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:08