同化
描述
小明有一个只含有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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 GPT 生成】
这个问题实际上是求字符串中0和1的连续段的个数。我们可以遍历字符串,统计连续的0和1的段数,然后取段数的最小值即为最少操作次数。
具体步骤如下:
count0
和count1
来记录。下面是对应的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)) # 输出最少操作次数
以上代码实现了对字符串的遍历和计数,输出了最少操作次数。
注意:由于输入字符串的长度可能很大,因此该解决方案可能在处理大数据时效率较低。对于更大规模的输入,可能需要使用更优化的算法来解决。
【相关推荐】