(辅助栈)
如果当前的字符为数位,解析出一个数字(连续的多个数位)并进栈。
如果当前的字符为字母或者左括号,直接进栈。
如果当前的字符为右括号,开始出栈,一直到左括号出栈,出栈序列反转后拼接成一个字符串,此时取出栈顶的数字(此时栈顶一定是数字,想想为什么? 因为数字先入栈 哈哈),就是这个字符串应该出现的次数,我们根据这个次数和字符串构造出新的字符串并进栈。
重复如上操作,最终将栈中的元素按照从栈底到栈顶的顺序拼接起来,就得到了答案。注意:这里可以用不定长数组来模拟栈操作,方便从栈底向栈顶遍历。
class Solution {
public:
//获取数字
string getDigits(string &s, size_t &ptr) {
string ret = "";
while (isdigit(s[ptr])) {
//string中的push_back函数,作用是字符串之后插入一个字符。
ret.push_back(s[ptr++]);
}