首页 > 试题广场 >

添加字符

[编程题]添加字符
  • 热度指数:3408 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛手里有一个字符串A,羊羊的手里有一个字符串B,B的长度大于等于A,所以牛牛想把A串变得和B串一样长,这样羊羊就愿意和牛牛一起玩了。
而且A的长度增加到和B串一样长的时候,对应的每一位相等的越多,羊羊就越喜欢。比如"abc"和"abd"对应相等的位数为2,为前两位。
牛牛可以在A的开头或者结尾添加任意字符,使得长度和B一样。现在问牛牛对A串添加完字符之后,不相等的位数最少有多少位?

输入描述:
第一行为字符串A,第二行为字符串B,A的场地小于等于B的长度,B的长度小于等于50.字符均为小写字母。


输出描述:
输出一个整数表示A串添加完字符之后,不相等的位数最少有多少位?
示例1

输入

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);
    }
}


发表于 2025-11-24 12:30:04 回复(0)
importjava.util.*;
public class Main{
public static void main(String arg[]){
Scanner sc = newScanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
inttemp = 0;
for(inti = 0;i<=s2.length() - s1.length();i++){
intsum = 0;
for(intj = 0;j<s1.length();j++){
if(s1.charAt(j)==s2.charAt(j+i)){
sum++;
}
}
if(sum>=temp){
temp = sum;
}
}
System.out.println(s1.length() - temp);
}
}
编辑于 2017-05-24 13:17:19 回复(0)

热门推荐

通过挑战的用户

添加字符