洛谷:P1928:外星密码


洛谷:P1928:外星密码

题目

P1928:外星密码

分析

这道题不算难,但还是有一些需要注意的地方。

核心算法:递归

根据描述,这个字符串中的字符有三种情形:

  1. [:标记着当前压缩段的开始。处理方式应该是:读出重复次数,对于后续的字符串(直到配对的那个]为止,继续解码——这也是递归的核心。然后重复添加后续解码出来的字符串那么多次。
  2. ]:标记着当前压缩段的结束。碰到这个字符后,就应该返回当前解码后的字符串。
  3. 常规字符:这说明当前字符是解码后字符串的一部分,所以添加即可。

相应的,核心处理代码是:

    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的道理。

答案

Solution

思考

(略)

上一篇 下一篇