第一次刷牛客,之前都是刷leetcode
牛客不像leetcode返回错误原因,全程盲改,终于通过了。
1.迷失的括号序列返回Impossible的几个初始情况:
1)字符串序列长度size为奇数
2)左括号的个数cnt_l 超过字符串序列长度的一半。
2.如果不满足以上两个情况则开始补全缺失的括号,补全原则为能先补左括号就补,左括号余量l_res = size/2 - cnt_l
3.检验给出的括号序列是否是合法的:
思路一)用栈检验。如果左括号则入栈,右括号时如果栈内无元素则不合法,有元素则弹出栈顶元素。最后检验栈为空合法,否则不合法。
思路二)用数值检验。左括号加一,右括号减一。如果再遍历途中存在数值小于0的情况则不合法。在最后判断如果数值不等于0也不合法(不过由于本题前面限制了左括号的数目所以都是小于0造成的不合法)
4.最后返回答案。
贴上代码:
#
#
# @param brackets string字符串 brackets
# @return string字符串
#
class Solution:
def MissingBrackets(self , brackets ):
# write code here
if brackets == '':
return ''
brackets = list(brackets)
cnt_l = 0
size = len(brackets)
for i in brackets:
if i == '(':
cnt_l +=1
if cnt_l>(size/2) or size%2==1:
return 'Impossible'
l_res = size/2-cnt_l
for i in range(len(brackets)):
if brackets[i] == '?' and l_res>0:
brackets[i] = '('
l_res-=1
elif brackets[i]=='?':
brackets[i]=')'
stack = 0
for i in brackets:
if i == '(':
stack+=1
if i == ')' :
stack-=1
if stack<0:
return 'Impossible'
if stack!=0: return 'Impossible'
ans = ''
for i in brackets:
ans+=i
return ans