样例为 10101111000010101111010101;
相同字符缩减完为 :1010100101011010101
长度为19 配对组数为9组,最后一个单着,直接纳入前一个配对组中即为:101;
长度t / 2 即为答案;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
char a[N];
char str[N];//配对的数存入新数组
int b[N];//判定数组,0为未配对,2为已配对;
int len;
int main()
{
scanf("%s",a);
int len=strlen(a);
int res=0,t=1;
memset(b,0,sizeof b);//b数组初始化;
str[0]=a[0];//从1开始判定;
for(int i=1;i<len;i++)
{
if(a[i]!=a[i-1]&&b[i-1]!=2)//如果i-1和i不相同且i-1未配对时
{
b[i]=b[i-1]=2;//配对成功
str[t++]=a[i];
}
else
{
if(a[i]!=a[i-1]&&b[i-1]==2)
//如果i-1和i不相同且i-1已经配对,直接存入数组;
str[t++]=a[i];
else if(a[i]==a[i-1]&&b[i-1]==2)
{//如果i-1和i相同,且i-1已经配对,直接存入数组;
str[t++]=a[i];
}
else if(a[i]==a[i-1]&&b[i-1]!=2)
//如果i-1和i相同,且i-1未配对,直接结束,不存入数组;
continue;
}
}
/*for(int i=0;i<t;i++)
printf("%c",str[i]);*/
if(t%2==1) t--; //如果他的个数为单数 ,即最后一个字符没有配对直接纳入前一个配对组中;
printf("%d\n",t/2);
return 0;
}