问题描述
小蓝用黑白棋的n个棋子排成一行,他在脑海里想象出了一个长度为n的01串T,他发现如果把黑棋当作1,白棋当作0,这一行棋子也是一个长度为n的01串S。
小兰决定,如果在S中发现一个棋子和他两边的棋子都不一样,就可以将其翻转变成另一个颜色。也就是说,如果S中存在字串101或010,就可以选择将其变成111和000,这样的操作可以无限重复。
小蓝想知道最少翻转多少次可以把S变成和T一模一样
输入格式
输入包含多组数据。输入的第一行包含一个正整数D包括数据组数/
后面2D行每行包含一个01串,每两行为一组数据,第2i-1 行为第i组数据的Ti,第2i行为第i组数据的Si, Si 和Ti 长度均为ni .
输出格式
对于每组数据,输出一行包含一个整数,表示答案,如果答案不存在请输入 -1
样例输入
2
1000111
1010101
01000
11000
样例输出
2
-1
解题思路
1.对于每一个不同的字符,根据题意他需要和两边的字符都不同才可以翻转,如果相同,那么无法进行翻转,输出-1即可
2.对于首字母和尾字母,由于左右两边缺少字符,所以一定无法比较,若不同,直接输出-1 即可
3.可以将s改成t的样例,直接输出操作步骤res即可
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
const int N=1e6+10;
char s[N],t[N];
int m