1654. Cipher Message
Time limit: 1.0 second
Memory limit: 64 MB
Memory limit: 64 MB
Müller tried to catch Stierlitz red-handed many times, but alwaysfailed because Stierlitz could ever find some excuse. Once Stierlitz waslooking through his email messages. At that moment, Müller enteredsecretly and watched a meaningless sequence of symbols appear on the screen.“A cipher message,” Müller thought.“UTF-8,” Stierlitz thought.
It is known that Stierlitz ciphers messages by the following method.
- He deletes all spaces and punctuation marks.
- He replaces all successive identical letters by one such letter.
- He inserts two identical letters at an arbitrary place many times.
Try to restore a message as it was after the second step. For that, remove fromthe message all pairs of identical letters inserted at the third step.
Input
The only input line contains a message ciphered by Stierlitz. The messageconsists oflowercase(小写字母) English letters and its length is at most 200000.
Output
Output the restored message.
Sample
input | output |
---|---|
wwstdaadierfflitzzz | stierlitz
|
题意:
消掉重复连续的字符;
题解:
简单的栈的应用
code:
#include <set>
#include <map>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <cassert>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#define maxn (200000 + 20)
#define pi acos(-1.0)
using namespace std;
typedef long long int LLI;
stack<char> str;
char a[maxn];
int main() {
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
scanf("%s",a);
for(int i = 0;a[i] != 0;i ++){
if(str.empty()) str.push(a[i]);
else if(str.top() == a[i]) str.pop();
else str.push(a[i]);
}
int t = str.size();
a[t --] = '\0';
while(!str.empty()){
a[t --] = str.top();
str.pop();
}
printf("%s\n",a);
return 0;
}