思路:
读完题显然暴搜穷举2^n种状态肯定是能得到结果的,但是看完数据长度估计要TLE;
基本事实:
每个位置的硬币最多调整1次;
如果前n-1个硬币都调整好了,第n个硬币也就不用调整了,因为题目是保证有解。
算法:
1.考虑最左边位置的硬币,可以看出如果与目标状态不同,就只能对第一个硬币和第二个硬币同时调整,这是一次操作;
2.考虑第二个硬币,假设经过第一次调整后与目标状态仍然不同;那么,我们该如何选择,显然不可能再去和1种一样调整对吧?那就只能调整第二个和第三个硬币;
3.依此类推,每一个硬币的可能操作方法如果从一个方向遍历的话最多有一个,因为之前的操作已经全部固定下来了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[] s1 = scanner.nextLine().toCharArray(),s2 = scanner.nextLine().toCharArray();
int ans = 0,len = s1.length;
for (int i = 0;i < len - 1;i++) {
if (s1[i] != s2[i]) {
ans++;
s1[i] = s2[i];
if (s1[i + 1] == '*') {
s1[i + 1] = 'o';
} else {
s1[i + 1] = '*';
}
}
if (s1 == s2) {
break;
}
}
System.out.println(ans);
}
}