解法思路:
从左到右遍历字符串s和字符串t,如果当前位置的字符不相同,则判断s中当前位置前后两个字符是否相同,如果相同则可以进行替换,否则无法完成替换,直接输出-1。如果可以进行替换,则将s中当前位置的字符替换为t中对应位置的字符,并将替换次数加1。最后输出替换次数即可。
#include<stdio.h>
#include<string.h>
const int N = 10000987;
int main()
{
int n;
scanf("%d", &n); // 输入数据组数
while (n--)
{
char t[N], s[N];
scanf("%s%s", t, s); // 输入两个字符串
int count = 0; // 记录替换次数
int len = strlen(s); // 获取字符串长度
int flag = 0; // 标记是否可以成功替换
for (int i = 0; i < len; ++i)
{
if (s[i] != t[i]) // 如果当前字符不相同
{
if (i - 1 >= 0 && i + 1 < len && t[i - 1] == t[i] && t[i + 1] == t[i]) // 如果前后两个字符都相同
{
s[i] = t[i]; // 替换当前字符
count++; // 替换次数加一
}
else
{
flag = 1; // 标记替换失败
break;
}
}
}
if (flag == 0) // 如果替换成功
{
printf("%d\n", count); // 输出替换次数
}
else
{
puts("-1"); // 否则输出-1
}
}
return 0;
}