其他分享
首页 > 其他分享> > 外星密码

外星密码

作者:互联网

题目描述

有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮 助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一 串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压 缩密码,外星人对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D 是一个整 数且 1≤D≤99),比如说字符串“CBCBCBCB”就压缩为“[4CB]”或者“[2[2CB]]”,类 似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2CB]]]”则是三重的。现 在我们给你外星人发送的密码,请你对其进行解压缩。

输入格式

第一行:一个字符串

输出格式

第一行:一个字符串

输入输出样例

输入 #1 
AC[3FUN]
输出 #1 
ACFUNFUNFUN

说明/提示

【数据范围】

对于 50%的数据:解压后的字符串长度在 1000 以内,最多只有三重压缩。

对于 100%的数据:解压后的字符串长度在 20000 以内,最多只有十重压缩。 对于 100%的数据:保证只包含数字、大写字母、’[‘和’]‘

 

自己写递归真的是毫无思路啊!去题解区看了一个代码,真的很巧妙。

思路:看到那么多层就是想到了用递归。

1.遇到字符:直接加入到字符串中

2.遇到'[':进入递归,递归完成后将得到的串赋值k遍

3.遇到']':return 答案

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 string work()
 6 {
 7     string ret = "";
 8     char ch;
 9 
10     while(cin >> ch)
11     {
12         if(ch == '[')
13         {
14             int x;
15             cin >> x;
16             string t = work();
17             for(int i = 1; i <= x; i++)
18             {
19                 ret += t;
20             }
21         }
22         else if(ch == ']')
23         {
24             return ret;
25         }
26         else
27         {
28             ret += ch;
29         }
30         
31     }
32     return ret;
33 }
34 
35 int main()
36 {
37     cout << work() << endl;
38     return 0;
39 }

 

 

标签:ch,递归,压缩,外星人,密码,字符串,外星
来源: https://www.cnblogs.com/ZhengLijie/p/12763487.html