LA3213

题目大意:
找到一个映射 使得两个字符串相同如果可以找到输出YES,反之输出NO

思路:
刚开始以为一定要按顺序一一对应,发现第一组数据答案是错的,后来才知道不一定要按照顺序。 那么只需要计算每个字母的个数,比较字母个数是否一样如果全部一样就可以找得到映射。

代码:

#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
#include <map>
#include <algorithm>

map<char,char> m;
char s[1010],str[1010];
int count1[1010],count2[1010];
int main() {

    while(scanf("%s",s)!=EOF) {
    //  m.clear();
    //  memset(flag,'\0',sizeof(flag));
        memset(count1,0,sizeof(count1));
        memset(count2,0,sizeof(count2));
        scanf("%s",str);
        int len = strlen(s);
        for(int i = 0; i < len; i++) 
            count1[s[i] - 'A']++;
        for(int i= 0; i < len; i++)
            count2[str[i] - 'A']++;
        sort(count1,count1 + 26);
        sort(count2,count2 + 26);
        int k;
        for( k = 0 ; k < 26; k++) 
            if(count1[k] != count2[k])
                break;
    /*  for(i = 0; i < len; i++) {
            if(flag[s[i] - 'A'] == '\0')
                flag[s[i] - 'A'] = str[i];
            else if(flag[s[i] - 'A'] != str[i])
                break;*/
    //      cout << flag[s[i]];
    //      if(flag[s[i]] == '\0')
        //      flag[s[i]] = str[i];
    //      else
        //      break;

        if(k >= 26)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值