解题思路:
题目的最终结果:
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
就是说要把两个字符串变为一模一样。
首先个数一定要一样!
参考代码:
x1=strlen(a);
x2=strlen(b);
x=fabs(x1-x2);
x求的是两个字符串相差的个数。
相当于前两个条件
1. 删除一个字符;
2. 插入一个字符;
然后算出两个字符串中相同字符的个数。
参考代码:
for(i=0;i
{
for(j=0;j
{
if(a[i]==b[j])number++;
}
}
下一步就可以用两个字符串中的较少的字符串的数量减取相同的字符的数量。
相当于第三个条件:
3. 将一个字符改为另一个字符。
参考代码:
min=(x1>x2?x2:x1);
y=min-number;
最后得到x+y的总和就是答案,即最少字符操作次数。
注意事项:
因为不知道x1>x2还是x2>x1,因此要用fabs(x1-x2)得到绝对值,当然用abs(x1-x2)也是一样的。头文件:#include
求a,b两个字符串要用到strlen,因此头文件要加上:#include
x1>x2?x1:x2的意思可能一些小白还不知道,这里解释一下,如果x1>x2得到x1,否则x2,就是说求max,也就是两个中的最大值。这样写比较方便操作。
当然也可以用if语句来做,稍微长一些。
((x1>x2?x1:x2)>x3)?(x1>x2?x1:x2):x3这个语句可以求3个数中的最大值。
最后最重要的是点个赞~
参考代码:
#include
#include
#include
int main()
{
char a[200],b[200];
int i,j,x1,x2,x,y,number=0,min;
scanf("%s\n%s",a,b);
getchar();
x1=strlen(a);
x2=strlen(b);
x=fabs(x1-x2);
for(i=0;i
{
for(j=0;j
{
if(a[i]==b[j])number++;
}
}
min=(x1>x2?x2:x1);
y=min-number;
printf("%d\n",x+y);
return 0;
}
评论区有小伙伴提出了字符相同的情况,于是我加了一点代码,如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
char a[200],b[200];
int i,j,x1,x2,x,y,number=0,min,number1=0;
scanf("%s\n%s",a,b);
x1=strlen(a);
x2=strlen(b);
getchar();
x=fabs(x1-x2);
if(x!=0)
{
for(i=0;i<(x1>x2?x1:x2);i++)
{
for(j=0;j<(x1>x2?x1:x2);j++)
{
if(a[i]==b[j])number++;
}
}
min=(x1>x2?x2:x1);
y=min-number;
printf("%d\n",x+y);
}
else if(x==0)
{
for(i=0;i<x1;i++)
{
if(a[i]!=b[i])number1++;
}
printf("%d",number1);
}
return 0;
}
这样就解决了评论区中abcd和acbd输出为0的情况,正确答案应该是2.
已经修改bug!
0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复