小q想要給他的朋友傳送乙個神秘字串,但是他發現字串太長了,於是小q發明了一種壓縮演算法對字串中重複的部分進行了壓縮,對於字串中連續的m個相同字串s將會壓縮為[m|s] (m為乙個整數且1<=m<=100),例如字串abcabcabc將會被壓縮為[3|abc],現在小a收到了小q傳送過來的字串,你能幫助他進行解壓縮麼?
s的長度<=1000;
s僅包含大寫字母、[、]、|;
解壓後的字串長度不超過100000;
壓縮遞迴層數不超過10層;
樣例
輸入 : 「hg[3|b[2|ca]]f」
輸出 : 「hgbcacabcacabcacaf」
解釋 : hg[3|b[2|ca]]f −−> hg[3|bcaca]f −−> hgbcacabcacabcacaf
解答:
一般情況下,若碰到類似括號匹配相關的問題,我們需要借助棧來實現我們的目的。
下面直接看原始碼來了解詳細思路。
class
solution
// 為了方便返回字串,此處採用vector容器當做棧使用而不是stack
std::vector<
char
> s;
for(
int i =
0; i < message.
size()
; i++
)// 若遇到'|',表示接下來是數字
else
if(s.
back()
=='|'
)else
// 數字插入注意順序
else
if(next == number)
} s.
pop_back()
;}// 將已經解析完的資料重新入棧
if(strn.
size()
&& str.
size()
)}}}
else
}// 此時容器中已經是完整還原的字串
return std::
string
(s.begin()
, s.
end())
;}const
int number =1;
const
int charactor =2;
};
解壓字串
問題描述 有一種簡單的字串壓縮方法,對於字串連續出現的同乙個字元,用該字串加上連續出現 的次數來表示 連續出現次數小於3時不壓縮 例如,字串aaaaabbbabaaaaaaaaaaaaabbbb可 壓縮為a5b3aba13b4。請設計乙個程式,將採用該壓縮方法得到字串的解壓縮,還原出原字串並輸出。輸...
領扣43 字串相乘
原題 給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。解題思路 將我們現實中使用的乘法運算步驟進行分解之後求結果 乘法運算可以看成是num1和num2從後往前依次相乘 在進行一次相乘後會得到乙個字串結果,將結果求和 注意 在...
領扣LintCode問題答案 8 旋轉字串
領扣lintcode問題答案 8.旋轉字串 給定乙個字串 以字元陣列的形式給出 和乙個偏移量,根據偏移量原地旋轉字串 從左向右旋轉 offset 0 the length of str 0 make changes on the original input data 原地旋轉意味著你要在s本身進行...