牛客竞赛Anagram
题目链接:https://ac.nowcoder.com/acm/problem/15927
一、题目:



二、题意:
给定两个长度一样的字符串(均为大写字母),计算将A变为和B一样的构成最少需要多少步。
三、思路:
将A和B分别按字母顺序排序,由于可能存在轮回向前找的情况,为了避免绕大圈,所以直接将A的当前字母和B的尾巴上未匹配的字母进行操作。
四、代码:
#include
#include
#include int cmp(const void *a,const void *b){return *(char*)a-*(char*)b;
}int main(){char A[55],B[55];while(scanf("%s %s",A,B)!=EOF){int sum=0,len=strlen(A),st=0,end=len-1;qsort(A,len,sizeof(char),cmp);qsort(B,len,sizeof(char),cmp);//printf("A:%s B:%s\n",A,B);for(int i=0;i<len;i++){if(B[i]>=A[st])sum+=B[i]-A[st++];elsesum+=B[i]-A[end--]+26;//printf("A:%d B:%d %d sum:%d\n",A[i],B[i],i,sum);}printf("%d\n",sum);//memset(A,0,sizeof(A));//memset(B,0,sizeof(B));}return 0;
}
五、总结:
1、排序函数qsort:
(1)qsort包含在stdlib.h头文件中;
(2)函数使用参考:https://blog.csdn.net/u010144805/article/details/78377568
2、我最开始想,先把相同的字母剔除掉再排序,但发现剔不剔除效果一样。。
3、新方法:直接从尾巴上匹配,不知道他们是怎么想到的,但真的挺管用,那我就记住它叭
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
