题意: 给定一个字符串, 如果相邻的两个字符相同, 则删掉这两个字符. 如reallazy 首先删掉ll, 变成 reaazy. 然后再删掉aa, 变成rezy. 此时没有相邻字符, 结束.
思路: 用栈stack来模拟整个过程, 从字符串第一个字符开始, 每次入栈一个字母, 看看栈顶的两个字母是否相等. 若相等, 则删掉顶上的两个字母, 直到字符串全部扫描一遍. 最后从栈底至栈顶输出即可.
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cmath>
#define MAXN 200005
#define INF 1000000005
// stack
using namespace std;
int i, len, top;
char s[MAXN], stk[MAXN];
int main()
{
while(~scanf("%s", s))
{
len = strlen(s);
top = 0;
stk[top++] = s[0];
for(i=1; s[i]; i++)
{
stk[top++] = s[i];
if(stk[top-1] == stk[top-2])
top -= 2;
}
for(i=0; i<top; i++)
printf("%c", stk[i]);
printf("\n");
}
return 0;
}