題目描述:
思路:首先想到使用棧來存放數據,一個數字棧,一個字符棧。
1.當遇到數字的時候就統計數字(注意數字可能會超過一位數)
2.當遇到字符的時候就記錄下來
3.遇到’[‘時,就說明新的數字和字符串要開始了,需要將已經記錄好的數字和字符串放到對應的堆棧當中
4.遇到’]'時,說明已經完成了一次統計,這個時候數字棧頂元素就是當前記錄的字符串應該重複的次數。然後再將字符棧頂元素取出來,加到結果字符串中,並彈出字符棧和數字棧棧頂元素。
class Solution {
public:
string decodeString(string s) {
int num=0;//用於統計數字結果
for(char c:s){
if(isdigit(c))
num=num*10+(c-'0');
else if(isalpha(c)){
res+=c;
}else if(c=='['){
chars.push(res);
nums.push(num);
res="";
num=0;
}else{
string temp=res;//已經重複一次了
for(int i=0;i<nums.top()-1;i++)//在這裏少重複一次
res+=temp;
res=chars.top()+res;
chars.pop();
nums.pop();
}
}
return res;
}
private:
stack<string> chars;
stack<int> nums;
string res;
};