人麻啦
笔试的时候一直在想 用指针做
不知道咋想的
题意 :
给一个字符串,让你输出字符串解码序列
字符串解码序列定义如下
如 "2[c]",
则输出 "cc"
括号可以嵌套
如 "2[wq3[ca]]"
则输出 "wqcacacawqcacaca"
如 "a2[c3[v]]"
则输出 acvvvcvvv
题解:
对递归理解还是不够深刻
遇到英文字符 ('a' - 'z') 直接附加到答案串末尾
遇到 '[' 找到需要处理子串递归调用并返回这部分的答案
遇到 ']' 根据前面的数字前缀决定加几个返回串
遇到 数字 进行计数
#include <iostream>
#include <string>
using namespace std;
string decodeString(string str) {
// write code here
string ans;
int len = str.size();
int cntstr = 1;//默认串数目为1
int number_cnt = 0;//串前面是否有数字
string retstring;
for(int i = 0;i < len; i++ ){
if(str[i]<= '9' && str[i] >= '0'){
if(number_cnt)
cntstr = cntstr*10 + str[i] - '0';
else{
number_cnt = 1;
cntstr = str[i] - '0';
}
}
else if(str[i] == '['){
int lbraket = 1;//找合法子密码关键
string ins;
while(i + 1 < len){
if(str[i + 1] == ']' && lbraket == 1) break;
i++;
if(str[i] == '[') lbraket++;
else if(str[i] == ']') lbraket--;
ins += str[i];
}
cout << ins << endl;
retstring = decodeString(ins);
cout << retstring <<endl;
}
else if(str[i] ==']'){
for(int j = 0;j < cntstr;++j)
ans += retstring;
retstring.clear();
number_cnt = 0;
cntstr = 1;
}
else
ans += str[i];
}
return ans;
}
int main(){
string s;
cin >> s;
cout << decodeString(s);
return 0;
}