牛客竞赛Anagram

题目链接:https://ac.nowcoder.com/acm/problem/15927

一、题目:
牛客竞赛Anagram_第1张图片
牛客竞赛Anagram_第2张图片
牛客竞赛Anagram_第3张图片
二、题意:
给定两个长度一样的字符串(均为大写字母),计算将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++];
            else
                sum+=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、新方法:直接从尾巴上匹配,不知道他们是怎么想到的,但真的挺管用,那我就记住它叭

你可能感兴趣的:(牛客)