问题描述 小明正在玩一个“翻硬币”的游戏。 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两 个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 输入格式 两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000 输出格式 一个整数,表示最小操作步数。 样例输入 1 ********** o****o**** 样例输出 1 5 样例输入 2 *o**o***o*** *o***o**o*** 样例输出 2 1
把输入的两个字符串str1、str2转换成字符串数组coin1、coin2
对这两个数组进行比较,相同用0表示,不同用1表示
问题描述 小明正在玩一个“翻硬币”的游戏。 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两 个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 输入格式 两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000 输出格式 一个整数,表示最小操作步数。 样例输入 1 ********** o****o**** 样例输出 1 5 样例输入 2 *o**o***o*** *o***o**o*** 样例输出 2 1
把输入的两个字符串str1、str2转换成字符串数组coin1、coin2
对这两个数组进行比较,相同用0表示,不同用1表示
结果就是相邻两个1之间的下标差
import java.util.Scanner; public class FlipCoin { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入两个字符串 String str1 = scanner.nextLine(); String str2 = scanner.nextLine(); //定义两个长度和输入字符串长度相等的数组 char coin1[] = new char[str1.length()]; char coin2[] = new char[str2.length()]; //字符串转字符串数组 coin1 = str1.toCharArray(); coin2 = str2.toCharArray(); boolean flag = true; int count = 0; int k = 0; for (int i = 0; i < str1.length(); i++) { if (coin1[i] != coin2[i]){ if (flag){ //在这之前没有coin1[i] != coin2[i] k = i; //记录下标位置 flag = false; } else{ //在这之前有coin1[i] != coin2[i] count += i - k; //更新count flag = true; } } } System.out.println(count); } }
import java.util.Scanner; public class FlipCoin { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入两个字符串 String str1 = scanner.nextLine(); String str2 = scanner.nextLine(); //定义两个长度和输入字符串长度相等的数组 char coin1[] = new char[str1.length()]; char coin2[] = new char[str2.length()]; //字符串转字符串数组 coin1 = str1.toCharArray(); coin2 = str2.toCharArray(); boolean flag = true; int count = 0; int k = 0; for (int i = 0; i < str1.length(); i++) { if (coin1[i] != coin2[i]){ if (flag){ //在这之前没有coin1[i] != coin2[i] k = i; //记录下标位置 flag = false; } else{ //在这之前有coin1[i] != coin2[i] count += i - k; //更新count flag = true; } } } System.out.println(count); } }