📅  最后修改于: 2023-12-03 14:51:23.959000             🧑  作者: Mango
给定一个只包含‘(’和‘)’的字符串,你可以通过对其进行的最小数量的操作使该字符串在任何索引处变得平衡。一个平衡字符串定义为在它所有的指数上都有相同数量的左右括号。操作之一是将左括号“(”替换为右括号“)”,或者将右括号“)”替换为左括号“(”。
请实现一个函数,该函数接收一个只包含‘(’和‘)’的字符串,返回使其在任何索引处变得平衡所需进行的最小操作次数。
首先,我们需要考虑如何判断该字符串是否平衡。 对于一个平衡的字符串,其左右括号数必须是相等的。我们可以通过遍历字符串并使用计数器计算左右括号的数量来验证这一点。
接下来,我们需要解决如何通过操作来使字符串平衡。我们可以使用栈来跟踪未匹配的左括号。当我们遇到一个左括号时,我们将其推入栈中;当我们遇到一个右括号时,我们从栈中取出最近的左括号并将其配对。在完成字符串的遍历后,我们栈中剩余的左括号数量就是需要替换的右括号数量,即为最小操作次数。
def min_steps_to_balance_parentheses(s: str) -> int:
stack = []
count = 0
for char in s:
if char == "(":
stack.append(char)
count += 1
else:
if len(stack) == 0:
count += 1
else:
stack.pop()
count -= 1
return count + len(stack)
时间复杂度是O(n),其中n是输入字符串的长度。因为算法遍历了一次输入字符串,所以最坏情况下算法需要O(n)的时间复杂度。
空间复杂度取决于使用的数据结构。由于算法使用了栈来存储左括号,所以空间复杂度为O(n),其中n是输入字符串的长度。