递归求解
刚开始别人说的stack的题目,当做stack来搞,头都晕了!后来想想确实可以划分成子问题,适合用递归求解。
题目-解码
形如“2[bc]”的字符串解码为 “bcbc”。问题在于,[]还可以套[],这个地方,一个[]可以看成一个子问题~
#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
using namespace std;
bool isDigit(char ch){
return ch>='0' && ch<='9';
}
string decodeStrring(string s, int& i){
string res = "";
for(; i < s.size(); i++){
if(s[i] == ']')
return res;
else if(!isDigit(s[i])){ // 字母
res += s[i];
}else if(isDigit(s[i])){
int num = 0;
while(isDigit(s[i]))
num = num*10 + s[i++]-'0';
i++; //'['下一个
string t = decodeStrring(s, i);
//cout<<"t = "<< t<<endl;
for(int j=0; j<num; j++)
res += t;
}
}
return res;}
string decodeString(string s) {
int i=0;
string res = decodeStrring(s,i);
return res;
}
int main() {
string s;
while(cin>> s){
string res = decodeString(s);
cout<< res <<endl;
}
return 0;
}
/*
in:
3[a]2[bc]
3[a2[c]]
[abc]3[cd]ef
out:
aaabcbc
accaccacc
abcabccdcdcdef
*/
总结
还是要仔细分析,是stack还是递归等等。