题目来源:

​https://ac.nowcoder.com/acm/contest/888/G​

题意:

给定一个字符串,每次删除连续三个相同字符然后拼接前后继续删除操作,问最多能删除几次。

思路:

栈模拟。

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 7;
char s[N];

int main() {
int ans;
while (~scanf("%s", s)) {
ans = 0;
stack<char> q;
q.push(s[0]);
q.push(s[1]);
for (int i = 2; i < strlen(s); i++) {
if (!q.empty() && s[i] == q.top()) {
q.pop();
if (!q.empty() && s[i] == q.top()) {
q.pop();
ans++;
} else {
q.push(s[i]);
q.push(s[i]);
}
} else q.push(s[i]);
}
printf("%d\n", ans);
}
return 0;
}