同化,小明有一个只含有0和1的字符串

同化
描述

小明有一个只含有0和1的字符串,他现在想要把整个字符串变成只有一种数字的字符串,请你帮助他,且告诉他最少需要几次操作,在操作时,你需要满足以下要求,每次只能改变任意两个相邻的数字,让他们同时变成1或0;

day12-02.zip

输入
第一行一个整数T(T<=1000),表示数据组数

其后n行,每行一个字符串(只有0和1,长度小于1000)

输出
T行,每行一个整数

输入样例 1

2
1001
1001101
输出样例 1

1
2

#include <iostream>
#include <string>
using namespace std; 
int calc(string str) {
    int count = 0;
    
    for (int i = 1; i < str.length(); i++) {
        if (str[i] != str[i-1]) {
            count++;
        }
    }
    return (count + 1) / 2;
}

int main() {
    int T;
    cin >> T;
    for (int i = 0; i < T; i++) {
        string str;
        cin >> str;
        int count = calc(str);
        cout << count << endl;
    }
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

【以下回答由 GPT 生成】

解决方案

这个问题实际上是求字符串中0和1的连续段的个数。我们可以遍历字符串,统计连续的0和1的段数,然后取段数的最小值即为最少操作次数。

具体步骤如下:

  1. 读取输入的数据组数T。
  2. 对于每组数据,读取字符串s。
  3. 初始化0和1的段数均为1,分别用两个计数器count0count1来记录。
  4. 从第二个字符开始遍历字符串s,如果当前字符和前一个字符相同,说明属于同一个连续段,不做处理;如果不相同,则将对应的计数器加1,表示进入了一个新的段。
  5. 最后取计数器中的较小值,即为最少操作次数。
  6. 输出最少操作次数。

下面是对应的Python代码:

t = int(input()) # 读取数据组数

for _ in range(t):
    s = input() # 读取字符串

    count0 = 1 # 初始化0的段数
    count1 = 1 # 初始化1的段数

    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            continue
        elif s[i] == '0':
            count0 += 1
        elif s[i] == '1':
            count1 += 1

    print(min(count0, count1)) # 输出最少操作次数

以上代码实现了对字符串的遍历和计数,输出了最少操作次数。

注意:由于输入字符串的长度可能很大,因此该解决方案可能在处理大数据时效率较低。对于更大规模的输入,可能需要使用更优化的算法来解决。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^