LeetCode 字串解碼(棧輔助)

2021-09-12 18:49:50 字數 1466 閱讀 1860

給定乙個經過編碼的字串,返回它解碼後的字串。

編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重複 k 次。注意 k 保證為正整數。

你可以認為輸入字串總是有效的;輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。

此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數 k ,例如不會出現像 3a 或 2[4] 的輸入。

示例:

s = "3[a]2[bc]", 返回 "aaabcbc".

s = "3[a2[c]]", 返回 "accaccacc".

s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

思路分析:一開始吧,可能我們都會認為這是一道遞迴解法題,蛋試遞迴在這道題實現貌似有點困難,因為這裡面的巢狀雖說比較一般,蛋試對於這種輸入"3[a2[c]3[d]]","2[abc]3[cd]ef"比較難以處理,因為在是否和上一次的結果合併這個問題上比較難以判斷。這時就要知道棧的應用了。

建立乙個num棧,乙個string棧,從前往後掃瞄字串:

如果是數字,讀入到num棧

如果是左括號,且後面是字元,讀入字串到string棧

如果是右括號。將string棧頂元素重複num棧頂元素次,放回到string棧

否則讀入乙個字元段,放入string棧

最後string棧頂就是結果

class

solution

numstack.

push

(stoi

(tempnum));

}else

if(s[nowindex]

==']'

)//如果string棧此時非空,則需要將剛剛得到的結果合併現在的string棧頂if(

!strstack.

empty()

)//最後放回到string棧中

strstack.

push

(tempres)

; nowindex +=1;

}else

if(s[nowindex]

=='['

) strstack.

push

(tempstr);}

else

//需要與string棧頂合併if(

LeetCode 字串解碼

給定乙個經過編碼的字串,返回它解碼後的字串。編碼規則為 k encoded string 表示其中方括號內部的 encoded string 正好重複 k 次。注意 k 保證為正整數。你可以認為輸入字串總是有效的 輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為原始資料不...

leetcode 字串解碼

給定乙個經過編碼的字串,返回它解碼後的字串。編碼規則為 k encoded string 表示其中方括號內部的 encoded string 正好重複 k 次。注意 k 保證為正整數。你可以認為輸入字串總是有效的 輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為原始資料不...

棧 字串 leetcode394 字串解碼

題目 解題思路 遍歷字串,如果遇到的是數,則把數存入num 如果遇到的是左括號,那麼將num壓入數棧,將左括號前面的字串ans壓入字串棧,然後將num清0,將ans也清空 如果遇到的是右括號,那麼將數棧的棧頂數彈出記為 k,然後將當前的ans重複k次,連線到字串棧的棧頂字串後面,然後將字串棧的棧頂字...