首页 > 解决方案 > 为什么我的第二个字符串替换正在执行但第一个没有?

问题描述

我正在解决 Leetcode 上的以下问题:https ://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/

这个想法是我们的​​输入是一个字符串s,其中包含括号“(”或“)”或小写英文字符。

并且我们需要删除最少数量的括号以确保 s 是“有效的”;如果我们有每个“(”后跟“)”并且我们可以在中间或两边都有字符,那么 s 是“有效的”,这很好。但是我们不能在 "(" 之前有 ")" ;如果是这样,我们需要删除 ")" 并且我们不能以 "(" 结尾,如果有,我们需要删除它。

这是我的代码:

def minRemoveToMakeValid(s: str) -> str:
    count = 0
    back_brack = 0

    for char in s:
        if char == "(":
            count += 1

        elif count <= 0 and char == ")":
            back_brack += 1

        elif count > 0 and char == ")":
            count -= 1
    print(count)
    final_s = s.replace("(", "", count)

    final_s = s.replace(")", "", back_brack)

    return final_s

对于input= "))(("; 我应该生产output= ""

但是因为first final_s没有执行,我得到的输出是"(("

出于某种原因,second 'final_s'执行得很好,但first final_s不是吗?我不明白为什么。而且我知道它没有执行,因为在我的 IDE 上它是灰色的,表示它没有执行。

我添加了一条print()语句来检查当时的计数确实为 2,所以我不明白为什么第一个“final_s”没有执行。

标签: pythonstring

解决方案


两者都在执行。只是你总是替换 on s,因此你覆盖了你的第一个final_s

而且我知道它没有执行,因为在我的 IDE 上它是灰色的,表示它没有执行。

您说的警告不是“它没有执行”,它要么是未使用的变量(因为您从不使用第一个值,只是覆盖它)或语句无效。

改变这个:

    final_s = s.replace("(", "", count)
    final_s = s.replace(")", "", back_brack)

进入这个:

    final_s = s.replace("(", "", count)
    final_s = final_s.replace(")", "", back_brack)

甚至这个:

    final_s = s.replace("(", "", count).replace(")", "", back_brack)

推荐阅读