小码哥在做英语单选题的时候突然想到了一个很有意思的问题:单选题的答案都是A或者B,那么很多道题目的答案组成的就是一个A和B组成的字符串。如果两个相邻的题目的答案是相同的,小码哥就可以修改这两个题目的答案,改成都是A、都是B或者一个是A另外一个是B,小码哥把这个定义为一次操作。那么对于任意一个答案字符串,最少需要多少次操作,才能使得它满足:任意相邻的题目的答案都不同。
格式
输入格式:
第一行包含一个数字 n (1≤≤1000),表示字符串的个数;
后面的 n 行,每一行表示一个长度为L(1≤L≤10000)的,由字符A和B随机组成的字符串。
输出格式:
输出有多行,每一行表示对应字符串需要的最少的操作次数T(0≤T≤10000)。
样例 1
输入:
2 AAABAB AABBBAB
输出:
1 2
思路:只有两种情况:
①以A为首:ABABABAB...
②以B为首:BABABABA...
所以根据这两种情况分别求次数,取最小即可
#include <iostream>
using namespace std;
const int N = 10005;
int n;
int main()
{
cin >> n;
while (n--)
{
string str;
cin >> str;
int ans1 = 0, ans2 = 0; // ABABAB BABABA
for (int i = 0; i < str.size(); i++)
{
if ((i + 1) % 2 == 0)
{
if (str[i] != 'B')
ans1++;
}
else if ((i + 1) % 2 != 0)
{
if (str[i] != 'A')
ans1++;
}
}
for (int i = 0; i < str.size(); i++)
{
if ((i + 1) % 2 != 0)
{
if (str[i] != 'B')
ans2++;
}
else if ((i + 1) % 2 == 0)
{
if (str[i] != 'A')
ans2++;
}
}
cout << min(ans1, ans2) << endl;
}
}