题意:
告诉你一个字符串,使得字符串满足下面条件:
1.一个串若结尾的两个字符相同,则这个串后面的两个字符不能相同。
2.不存在连续相同的三个字符。
求删除最少的字符,使得字符串满足上面条件。
解析:直接用栈来求解,
先往栈内压人前两个字母,因为前面的尽量不要删除,删除中间的,这样可以减少删除字母的次数。
2. 如果当前字母和栈顶字母相同,且栈顶第二个字母和栈顶相同。
告诉你一个字符串,使得字符串满足下面条件:
1.一个串若结尾的两个字符相同,则这个串后面的两个字符不能相同。
2.不存在连续相同的三个字符。
求删除最少的字符,使得字符串满足上面条件。
解析:直接用栈来求解,
先往栈内压人前两个字母,因为前面的尽量不要删除,删除中间的,这样可以减少删除字母的次数。
依题意,有两种情况,当前字母无法入栈
2. 如果当前字母和栈顶字母相同,且栈顶第二个字母和栈顶相同。
最后将栈内的元素从头到尾输出就好了。
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 200010;
char st[N];
char str[N];
int main() {
char ch;
while(scanf("%s",str) != EOF) {
int top = 0;
int len = strlen(str);
st[top++] = str[0];
st[top++] = str[1];
for(int i = 2; i < len; i++) {
ch = str[i];
if((ch == st[top-1] && st[top-2] == st[top-3])|| ch == st[top-1] && st[top-1] == st[top-2]) {
continue;
}else {
st[top] = ch;
top++;
}
}
st[top] = '\0';
printf("%s\n",st);
}
return 0;
}