题目:Given an expression s
includes numbers, letters and brackets. Number represents the number of repetitions inside the brackets(can be a string or another expression).Please expand expression to be a string.
样例
s = abc3[a]
return abcaaa
s = 3[abc]
return abcabcabc
s = 4[ac]dy
, return acacacacdy
s = 3[2[ad]3[pf]]xyz
, return adadpfpfpfadadpfpfpfadadpfpfpfxyz
class Solution {
public:
/**
* @reverse the word, include words and numbers
*/
void reverseWord(string &s) {
for (int i = 0, j = s.size() - 1; i < j; i++,j--) {
swap(s[i], s[j]);
}
}
/**
* @param s an expression includes numbers, letters and brackets
* @return a string
*/
string expressionExpand(string& s) {
// Write your code here
stack<char> res;
string val = "";
int len = s.length();
if (len == 0) {
return val;
}
for (int i = 0; i < len; i++) {
if (s[i] == ']') {
string tmp = "";
while (!res.empty()) {
char ch = res.top();
res.pop();
if (ch == '[') {
break;
}
tmp += ch;
}
string num = "";
while (!res.empty()) {
char tmpnum = res.top();
res.pop();
if(isdigit(tmpnum)){
num += tmpnum;
} else {
res.push(tmpnum);
break;
}
}
reverseWord(num);
int count = atoi(num.c_str());
string mid = "";
reverseWord(tmp);
for (int j = 0; j <count; j++) {
mid += tmp;
}
for (int j = 0; j < mid.length(); j++) {
res.push(mid[j]);
}
}
else {
res.push(s[i]);
}
}
while (!res.empty()) {
val += res.top();
res.pop();
}
reverseWord(val);
return val;
}
};