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