给定一个长度为n的字符串s,字符串由小写字母a..z
组成。
小明来对这个字符串进行操作,他会从头到尾检查这个字符串,如果发现有两个相同的字母并排在一起,就会把这两个字符都删掉。小明会重复这个操作,直到没有相邻的相同字母。
你需要给出处理完成的字符串。
输入格式
第一行一个整数n。
接下来一行一个长度为n的字符串s。
输出格式
输出最后处理完成的字符串,有可能是空串。
样例输入1
9
acccabddb
样例输出1
aca
样例输入2
5
ababa
样例输出2
ababa
数据规模
对于所有数据,保证n≤100000。
答案
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5+5;
char Stack[N];
int top=0;
char tmp;
int main(){
int n;
scanf("%d", &n);
getchar(); //读换行符
while(n--){
scanf("%c", &tmp);
if(tmp == Stack[top]) //如果与栈顶字母相等就直接出栈
--top; //相当于就是消除了两个相同的字母
else
Stack[++top] = tmp; //不等就直接入栈
}
Stack[top+1] = '\0';
printf("%s", Stack+1); //最后这里栈是从Stack[1]开始的!!!!!!
return 0;
}