题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个只由小括号的左右部分组成的字符串,现在规定可以往其中任意位置插入小括号的任意部分,求需要的插入最少字符数使得字符串有效。

思路分享

  • 两个思路,参考题解里的是经典的模拟栈进出方式,由于是从左往右添加,所以弹栈的情况只有加入右括号,且栈顶为左括号的时候。那么最后留在栈里,没有被抵消就是需要插入的最小数字,无论什么顺序,都可以任意插入另一半匹配。

  • 还有抽象题目后,摆脱栈的思路,把 ( ) 分别视作 +1 和 -1 分数,当 ) 入栈时,如果栈顶是 ( 就抵消,否则就统计负分的分值。最后把两边的绝对值相加就是题目所求。

    https://leetcode.cn/problems/minimum-add-to-make-parentheses-valid/solutions/2834346/ke-yi-xian-yong-zhan-mo-ni-de-si-lu-xian-1pmj/

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
class Solution:
def minAddToMakeValid(self, s: str) -> int:
# 由于是从左往右添加,所以弹栈的情况只有加入右括号,且栈顶为左括号的时候
stk = list()
for c in s:
if stk and c == ')' and stk[-1] == '(':
stk.pop()
else:
stk.append(c)
return len(stk)