链接:https://codeforces.com/contest/1437/problem/B
一看题便知道这题存在什么规律(别马后炮行不行啊喂....)
引入:意识到只有连续的1或者连续的0的时候才会去进行操作,如何消去连续的1呢?去找以0为端点,以当前1为端点的段,然后找个段调个头。同理对于0。为了使得操作的次数最少?我们让这俩操作一起做。
做法:
对于当前的连续1,我们去后面找到一段连续0,然后以它们为端点的段进行掉头操作。
这样应该是两两配对的,这样应该是两两配对的,如果有剩余的话,需要向上取整,可以理解为与整个串的端点的段进行掉头操作。

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

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n, cnt = 0;
        cin >> n;
        string s;
        cin >> s;
        for(int i = 1; i < n; i++) {
            if(s[i] == s[i-1]) {
                cnt++;
            }
        }
        if(cnt & 1) cout << cnt/2 + 1 << endl;
        else cout << cnt/2 << endl;
    }
}