Leetcode 394 字串解碼 C

2021-10-07 18:39:55 字數 1517 閱讀 9576

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

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

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

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

示例 1:

輸入:s = "3[a]2[bc]"

輸出:"aaabcbc"

示例 2:
輸入:s = "3[a2[c]]"

輸出:"accaccacc"

示例 3:
輸入:s = "2[abc]3[cd]ef"

輸出:"abcabccdcdcdef"

示例 4:
輸入:s = "abc3[cd]xyz"

輸出:"abccdcdcdxyz"

棧應用

用兩個棧分別儲存重複的次數、括號以及重複的字串

我們用乙個變數now記錄當前需要重複的字串。

如果是數字,我們需要壓入數字及之後的左括號,同時將now設為空。

字母我們需要用now進行堆積,

如果是],我們需要判定棧頂是不是[,如果不是我們首先需要把字串進行拼接,直至棧頂為左括號,然後再彈出數進行重疊,之後再壓入棧中。是[,則直接進行重複,然後壓入棧中。

詳細過程見**

string decodestring

(string s)

else num.

push

(stoi

(now));

op.push

("[");

now ="";

}else

if(s[i]

==']')}

if(op.

top()!=

"[")

op.push

(newnow)

; num.

pop();

}else

if(op.

top()!=

"[")

op.push

(newnow);}

now ="";

}else

if(s[i]

>=

'0'&& s[i]

<=

'9')

op.push

(now)

; now ="";

}while

(i>=

'0'&& s[i]

<=

'9')

now +

= s[i++];

i--;}

else

}return op.

top(

)+now;

}

Leetcode 394 字串解碼

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

LeetCode 394 字串解碼

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

LeetCode 394 字串解碼

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