给定一个仅包含"}"和"{"的表达式。该表达式可能不平衡。请找出使表达式平衡的最小反向括号数
......Python'' a =['}{}{}}}{{{{}{}}{{}}{{}}{{']
for elem in a:
sol=0
stack=[]
#stack.append(elem[i])
i=0
while i<len(elem)-1:
if elem[i]=='{' and elem[i+1]=='{':
stack.append(elem[i])
stack.append(elem[i+1])
sol+=1
elif elem[i]=='}' and elem[i+1]=='{':
if len(stack)!=0:
if stack[-1]=='{':
stack.pop()
stack.append(elem[i+1])
else:
stack.append(elem[i])
stack.append(elem[i+1])
sol+=1
else:
stack.append(elem[i])
`` stack.append(elem[i+1])
sol+=2
elif elem[i]=='}' and elem[i+1]=='}':
if len(stack)!=0:
if stack[-1]=='{' and stack[-2]=='{':
stack.pop()
stack.pop()
sol-=1
elif stack[-1]=='{' and stack[-2]=='}':
stack.pop()
stack.append(elem[i+1])
else:
stack.append(elem[i])
stack.append(elem[i+1])
sol+=1
else:
stack.append(elem[i])
stack.append(elem[i+1])
sol+=1
i+=2
print(sol)
....
预期5产出6
3条答案
按热度按时间disbfnqx1#
我已经尝试根据字符串表达式所需的左括号和反转的数量来解决您的问题,以计算括号反转的最小数量。
下面给出了相同的Python代码:
ozxc1zmp2#
使用Python
产出
链接:https://www.svastikkka.com/2022/07/minimum-bracket-reversal.html
kpbpu0083#
你可以使用link找到你问题的答案,这个链接提供了不同的方法来解决上面的问题,还有c,java和python代码。
链接中使用的最佳方法很简单,包括以下步骤。
1.在第一次遍历时删除字符串的平衡部分,只在堆栈中保留不平衡部分。
1.那么堆栈中只剩下类型为}}} ...}{... {{{的字符串。
1.设}的计数为m,{的计数为n。
1.最小逆转次数为ceil(m/2)+ceil(n/2)。
Python代码如下:
时间复杂度:时间复杂度O(n)
好好享受吧!