返回

用 Python 轻松解决 LeetCode 1021:删除最外层的括号

前端

作为一名算法和数据结构爱好者,我热衷于探索 LeetCode 上具有挑战性的问题。在本文中,我将分享我解决 LeetCode 1021:删除最外层的括号问题的经历,该问题要求移除字符串中最外层的括号以形成一个有效的括号字符串。

问题

有效括号字符串为空 ""、"(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。

如果有效字符串 S 可以被表示为 "(" + A + ")",或者 S = A + B,其中 A 和 B 都是有效的括号字符串,则称 S 为嵌套括号字符串。例如,"()" 和 "()()" 是嵌套括号字符串,但 "(" 和 "(()" 不是。

给你一个嵌套括号字符串 S,删除最外层的括号并返回一个有效的括号字符串。

解决思路:

为了解决这个问题,我们需要移除最外层的括号,直到我们得到一个有效的括号字符串。以下步骤了我的算法:

  1. 初始化计数器: 使用两个计数器 leftright,它们分别跟踪左括号和右括号的数量。
  2. 遍历字符串: 遍历输入字符串 S 中的每个字符。
  3. 检查括号: 对于每个字符,检查它是左括号 ( 还是右括号 )
  4. 更新计数器: 根据括号类型更新 leftright 计数器。如果 leftright 均大于 0,则意味着我们在当前括号内部,因此我们保留该字符。
  5. 检查有效性: 如果 leftright 为 0,则意味着我们遇到了最外层的括号。在这种情况下,我们跳过该字符。
  6. 构建结果: 将保留的字符添加到结果字符串 result 中。
  7. 返回结果: 遍历字符串后,返回结果字符串 result

Python 代码:

def removeOuterParentheses(s):
    # 初始化计数器
    left = 0
    right = 0
    # 初始化结果字符串
    result = ""
    
    # 遍历字符串
    for char in s:
        # 更新计数器
        if char == '(':
            left += 1
        elif char == ')':
            right += 1
        
        # 检查有效性
        if left > 0 and right > 0:
            result += char
        
    # 返回结果
    return result

时间复杂度:

该算法的时间复杂度为 O(n),其中 n 是字符串 S 的长度。我们遍历字符串一次,并在每个字符上执行常量时间操作。

示例:

s = "(()())(())"
result = removeOuterParentheses(s)
print(result)  # 输出:"()()()"

总结:

使用 Python 解决 LeetCode 1021:删除最外层的括号问题是一种既有趣又富有教育意义的体验。该算法采用了一种简单而有效的策略,可以有效地移除最外层的括号,并返回一个有效的括号字符串。通过遵循本指南中的步骤,您可以自信地解决此问题并提升您的算法技能。