python - 为什么我的第二个字符串替换正在执行但第一个没有?
问题描述
我正在解决 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”没有执行。
解决方案
两者都在执行。只是你总是替换 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)
推荐阅读
- woocommerce - 在类别页面上显示 Woocommerce 面包屑
- neo4j - Cypher 查询以查找具有共享属性的节点,并将其公式化为输入和输出
- javascript - 按 parentId javascript 对平面数组进行排序
- git - 尝试推送到 git 实验室时,“确保在 git 中配置了 'user.email' 和 'user.name'”
- mysql - SQL 事件不运行
- python-3.x - 测试 AWS Lambda 处理程序函数时出错:事件和上下文参数的数据格式
- aem - AEM 6.4 [coral-3] - 根据下拉选择切换对话框字段 - 不适用于多个值
- security - 仅允许 OAuth2 API 的受信任应用程序
- python - Python 绘制具有集成的函数
- html - 在 CSS 中,“使 div 充当列”是什么意思?意思是?并将 div 居中