https://leetcode-cn.com/problems/decode-string/
1.全局小标
2.两种模式
3.']'处理。如果一个新开的decode的第一个字符是],说明不属于这一层的,直接返回。
class Solution {
public:
int i;
string s;
int get_digit(int i,int j,string s){
int sum=0;
for(int k=i;k<=j;k++){
sum*=10;
sum+=s[k]-'0';
}
return sum;
}
string decode(){
if(i>=s.length() || s[i]==']'){
return "";
}
if(isdigit(s[i])){ //num[ss]
int num_start_pos=i;
int num_end_pos=i;
while(s[num_end_pos]>='0' && s[num_end_pos]<='9'){
num_end_pos++;
}
int num=get_digit(i,num_end_pos-1,s);
// [
i=num_end_pos+1;
string ss=decode();
// ]
i++;
string ans;
while(num--){
ans+=ss;
}
return ans+decode();
}
else{//s
string ans;
while(i<=s.length() && s[i]>='a' && s[i]<='z'){
ans+=s[i];
i++;
}
return ans+decode();
}
}
string decodeString(string _s) {
i=0;
s=_s;
return decode();
}
};