题目描述:
题目解读:
对字符串 a 进行加密后得到加密字符串 s 。
加密规则为:
先在字符串 a 的每个字符之后,添加任意(可能为零)数量的小写字母(与a的原字符不同)。
在每次这样的添加之后,再将原字符添加在已添加的任意(可能为零)数量的小写字母后。
输入:加密后的字符串 s 。
输出:加密前的字符串 a 。
解题思路:
因为在 串a的原字符 后面添加完 任意字母 之后,还要添加 串a的原字符。
因此在字符串 a 的每个字符之后,必定会存在与之相同的字符,且两个字符之间的所有字符就是添加的加密字符。
所以从头遍历字符串s,输出第一个字符s[0],然后寻找和s[0]内容一致的字符s[x],这一段就是字符串a的第一个字符a[0]。
然后紧挨着输出该字符的下一位s[x+1],再找和s[x+1]一样的字符,该字符是a的第二个字符a[1]。
...循环往复即可。
代码实现:
#include <stdio.h>
#include<iostream>
using namespace std;
void Solve() {
int n;
int i = 0;
char last;
string s;
cin >> n >> s;
last = s[0];
for (i = 1; i < n; i++) {
if (s[i] == last) {
cout << last;
last = s[++i];
}
}
cout << endl;
return;
}
int main() {
int t;
cin >> t;
while (t--) Solve();
return 0;
}
遇到的错误: