牛牛手里有一个字符串A,羊羊的手里有一个字符串B,B的长度大于等于A,所以牛牛想把A串变得和B串一样长,这样羊羊就愿意和牛牛一起玩了。
而且A的长度增加到和B串一样长的时候,对应的每一位相等的越多,羊羊就越喜欢。比如"abc"和"abd"对应相等的位数为2,为前两位。
牛牛可以在A的开头或者结尾添加任意字符,使得长度和B一样。现在问牛牛对A串添加完字符之后,不相等的位数最少有多少位?
第一行为字符串A,第二行为字符串B,A的场地小于等于B的长度,B的长度小于等于50.字符均为小写字母。
输出一个整数表示A串添加完字符之后,不相等的位数最少有多少位?
abe cabc
1
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
char[] a = in.next().toCharArray();
char[] b = in.next().toCharArray();
int m = a.length, n = b.length;
//ret用于记录最终的最小差异数
//初始化为m,即假设最坏情况是所有字符都不一样
int ret = m;
//外层循环:枚举字符串a在字符串b中的“起始对齐位置”
//i表示a串对其到b串的第i个字符
//判断条件i<=n-m保证了a串尾部不会越过b串的边界
for(int i = 0; i <= n-m; i++){
//tmp用于记录当前这次对齐中,有多少个字符不相同
int tmp = 0;
//内层循环:遍历字符串a的每一个字符
for(int j = 0; j < m; j++){
/**
a[j]:a串的当前字符
b[i+j]:b串的对应字符
*/
if(a[j] != b[i+j]){
tmp++;
}
}
//每次内循环结束后,用当前算出的差异数tmp更新全局最小值ret
ret = Math.min(ret,tmp);
}
System.out.println(ret);
}
}