394 字串解碼

2021-10-06 14:06:16 字數 1481 閱讀 8383

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

編碼規則為: 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[acc],後變成accaccacc。因而可以使用乙個棧來儲存資訊,依次訪問當前字串:

遇到數字時,需要把連續的數字轉換為乙個字串入棧

遇到字元或者符號[時,直接入棧

遇到符號]時,需要依次出棧直到碰見字元[,出棧的所有字元反轉就構成了當前解碼的字串,再出棧的必定是數字,就是該字串重複的次數,然後把該字串再次入棧即可。

class

solution

return res;

}//將容器的字串轉換為乙個字串

string getstring

(vector v)

return res;

} string decodestring

(string s)

//判斷當前訪問是字母或者[直接入棧

elseif(

isalpha

(s[i]

)|| s[i]

=='['

)//判斷是]

else

//反轉出棧的字元順序

reverse

(tmp.

begin()

, tmp.

end())

; sck.

pop_back()

; string o ="";

//得到解碼的字串

string t =

getstring

(tmp)

;//獲得該字串需要重複的次數

int count =

stoi

(sck.

back()

);sck.

pop_back()

;while

(count--

)//將解碼完畢的字串重新入棧

sck.

push_back

(o);}}

//最終棧內字元轉換為字串就是最終結果

return

getstring

(sck);}

};

394 字串解碼

思路 思路一 使用棧 這種括號或者括號套括號的模式非常適合用棧來解決,設定乙個輔助棧,當遇到 的時候,開始將所有東西推到 棧中,直到遇到 時,開始取棧中的東西。取得方法 先取字元,再取數字,計算得到到的東西再壓入棧中 直到所有 都遍歷完為止 注意點 從棧中取的順序和最終生成結果得順序應該一致 cla...

394 字串解碼

注意 k 保證為正整數。你可以認為輸入字串總是有效的 輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數 k 例如不會出現像 3a 或 2 4 的輸入。輔助棧解法 遍歷字串 s 中每個字元 c 當 c 為數字時,將數字字元轉化為...

394 字串解碼

有乙個多星期沒有刷題,因為在泰州移動總部實習,才剛來不久不敢偷偷準備秋招,現在部門混的差不多了,可以偷偷準備秋招筆試。刷題果然要一直刷啊,要保持手感 今天做題狀態不好,一些api記得也不是很清晰 所以,準備接下來的一段時間需要做好計畫,分好任務和時間段。題目 給定乙個經過編碼的字串,返回它解碼後的字...