题意:对于一个给定的字符串,定义字符串中的typo为:
1.连续出现三个相同的字符 如aaa
2.连续出现两组 每组两个相同的字符 如aabb
问最少去掉多少个字符后,能让字符串中不出现typo串。
思路:贪心地从前往后检测并去掉typo串,出现一个去掉一个即可。
代码:注意写法。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define lb(x) (x&-(x))
const int N = 101010;
char s[200005];
char ans[200005];
int aid=0,len=0;
int kind1=0,kind2=0;
void chk(char c)
{
if(aid-2>=0&&ans[aid-2]==ans[aid-1]&&ans[aid-1]==c)//kind1 连续3个
kind1=1;
if(aid-3>=0&&ans[aid-3]==ans[aid-2]&&ans[aid-1]==c)//kind2连续2组
kind2=1;
}
int main(){
scanf(" %s",s);
len=strlen(s);
for(int i=0;i<len;i++)
{
chk(s[i]);//看ans的前面的3 4个加上当前这个是否不符合情况
if(kind1)
{
kind1=0;
continue;
}
if(kind2)
{
kind2=0;
continue;
}
ans[aid++]=s[i];
}
printf("%s\n",ans);
return 0;
}