给定字符串数字 S。任务是在字符串S 中插入最少数量的左括号和右括号,使得结果字符串是平衡的,并且每个数字 d 必须在 d 对匹配括号内。
例子:
Input: S = 221
Output: ((22)1)
Explanation:
The string ((2))((2))(1) is not valid solutions because it is not of minimum length.
Input: S = 3102
Output: (((3))1)0((2))
方法:
- 首先,我们将为第一个元素插入所需的左括号并将其值存储在p 中。
- 然后,我们遍历字符串1字符串的长度和
- 从前一个元素中减去当前元素 (int(S[i-1]) – int(S[i])) 并将其值存储在变量w 中。
- 如果w >= 0,则插入 w 右括号并将 p 更新为 (p – w)。除此以外,
- 插入当前值减去 p (int(S[i]) – p) 左括号并将 p 更新为等于当前值。
- 在循环结束时,我们通过插入所需的右括号来平衡括号。
下面是上述方法的实现:
# Python 3 implementation to balance
# the string
# Function to insert matching parantheses
def ParanthesesNesting(S):
# To check first element if 0 or not
if S[0]=='0':
out ='0'
p = 0
else:
out ='('*(int(S[0])) + S[0]
p = int(S[0])
# Loop from 1 to length of input_string
for i in range(1, (len(S))):
w = int(S[i - 1]) - int(S[i])
# To check w is greater than or
# equal to zero or not
if(w >= 0):
out = out + ')' * int(w) + S[i]
p = p - w
else:
out = out + '(' * (int(S[i]) - p) + S[i]
p = int(S[i])
y = out.count('(') - out.count(')')
out += ')' * int(y)
return(out)
# Driver code
if __name__ == '__main__':
string ='221'
print(ParanthesesNesting(string))
输出:
((22)1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live