样例为 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; 
}