问题描述
小蓝用黑白棋的 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
评测用例规模与约定
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
while(n>0){
n--;
int count=0;
String t=scan.next();
String s=scan.next();
char tt[]=t.toCharArray();
char ss[]=s.toCharArray();
for(int i=1;i<s.length()-1;i++){
if(ss[i-1]==ss[i+1]&&ss[i]!=ss[i-1]&&ss[i]!=tt[i]){
ss[i]=ss[i-1];
count++;
}
}
if(Arrays.equals(ss,tt)){
System.out.println(count);
}
else{
System.out.println(-1);
}
}
scan.close();
}
}