給出乙個括號序列s,允許你在s的開始和結尾處新增一定數量的左括號('[')或者右括號(']')使其變為乙個合法的括號匹配序列。你能求出新增最少的括號之後的合法的括號匹配序列是什麼嗎?
思路:實時記錄左括號的數量l,如果遇到右括號時,若左括號數量l為0,則證明需要在當前右括號前面增加乙個左括號[
def solve(s):
n,l,ans=len(s),0,''
for i in range(n):
t=''
if s[i]=='[':
l+=1
t=s[i]
else:
if l:
l-=1
t=']'
else:
t=''
ans+=t
while l:
ans+=']'
l-=1
return ans
s=input()
print(solve(s))
這是第一次寫的**,只過了60%,原因是
輸入:]]][[[[
預期:[[]][[[[]]]]
實際: [ [ [ [] ] ]](我拆分了一些,確實是對的)
這個額外新增數雖然是7,但生成括號也是對的啊,原因在於:當遇到右括號,且手頭沒有左括號可以拿出時,這個額外新增的左括號需要加在字串的最左邊的(服了,這麼死板)
def solve(s):
n,l,ans=len(s),0,''
for i in range(n):
if s[i]=='[':
l+=1
ans+=s[i]
else:
if l: l,ans=l-1,ans+']'
else: ans='['+ans+']'
while l:
l,ans=l-1,ans+']'
return ans
s=input()
print(solve(s))
完成括號匹配
合法的括號匹配序列被定義為 1.空串 是合法的括號序列 2.如果 x 和 y 是合法的序列,那麼 xy 也是乙個合法的括號序列 3.如果 x 是乙個合法的序列,那麼 x 也是乙個合法的括號序列 4.每個合法的括號序列都可以由上面的規則生成 例如 都是合法的。牛牛現在給出乙個括號序列s,牛牛允許你執行...
括號匹配(未完成)
寫了乙個小時,想模擬一下。結果考慮了很多地方,到最後還是有個地方無法解決,就是 只需要新增乙個 即可,但是我的卻無法判斷str i 以後的字元,因為我的只能判斷str i 以前的元素,在更新str i k 的時候,無法判斷str i 是否可以通過改變str i k 達到更優。所以必須在判斷str i...
記錄六 括號匹配
給出乙個僅僅包含 的字元,判斷輸入的字串是否是有效的,空字串是有效的。例 input output true input output true input output false 思路 括號匹配是資料結構棧的典型應用,首先將第乙個元素進行入棧,然後將後面的元素與棧頂元素進行比較,如果與棧頂元素匹...