计算括号反转次数

2024 年 8 月 29 日 | 阅读 3 分钟

在此问题中,我们将给定一个包含 "(" 和 ")" 的字符串表达式。括号的放置方式可能无法使表达式平衡。我们需要翻转括号以使表达式平衡。最后,我们需要返回为了使表达式平衡而翻转括号的次数。

示例

从上面的例子中,我们可以得出结论,只有当括号的总数为偶数时,表达式才能变成平衡表达式;同样,两种括号的数量,即 "(" 和 ")" 的数量也必须相等。

解决此问题的基本方法是查看每个括号并计算翻转括号的次数。我们可以递归地执行此操作,并跟踪使表达式平衡所需的最小翻转次数。

时间复杂度:使用此方法解决此问题的 O(2n) 时间复杂度。

空间复杂度:使用此方法解决此问题的 O(n) 空间复杂度。

我们可以看到这种方法非常低效。

一种有效的方法可以在 O(n) 时间内解决此问题。这种方法的核心思想是首先删除表达式中所有平衡的部分。例如,我们将 "}{{}}{{" 转换为 "}{{". 当我们仔细观察时,我们可以注意到,如果我们删除平衡的部分,我们将始终剩下形如 }}…}{{…{ 的字符串。表达式遵循 0 个或多个闭括号后跟 0 个或多个开括号。

现在我们可以轻松计算需要多少次翻转才能将表达式转换为平衡表达式。令 n 为闭括号的数量,m 为开括号的数量。根据此,我们将需要 [n / 2] + [m / 2] 次翻转。因此,我们将需要 2 次翻转。

下面是上述想法的实现

代码

输出

The minimum number of reversals required are: 1

时间复杂度:此程序的 O(n) 时间复杂度。

空间复杂度:此程序将占用 O(n) 的空间复杂度。


下一主题排序颜色问题