题目
分析
这道题不算难,但还是有一些需要注意的地方。
核心算法:递归
根据描述,这个字符串中的字符有三种情形:
[
:标记着当前压缩段的开始。处理方式应该是:读出重复次数,对于后续的字符串(直到配对的那个]
为止,继续解码——这也是递归的核心。然后重复添加后续解码出来的字符串那么多次。]
:标记着当前压缩段的结束。碰到这个字符后,就应该返回当前解码后的字符串。- 常规字符:这说明当前字符是解码后字符串的一部分,所以添加即可。
相应的,核心处理代码是:
while(iss >> c)
{
if(c == '[')
{
iss >> num;
x = expand(iss);
while(num--)
key += x;
}
else if(c == ']')
return key;
else
key += c;
}
字符串处理
经过实践,发现用string
存储字符串,然后用istringstream
来读入每一个字符是最好的方式。这也是expand
函数中参数用了istringstream
的道理。
答案
思考
(略)