UVA1339- Ancient Cipher

来源:互联网 发布:现代h6行车记录仪软件 编辑:程序博客网 时间:2024/05/16 15:01

题意:给定两个长度均为n的字符串,判断它们之间的26个字母能否一一对应,即做一个一一映射后使得两个字符串相同。输入两个字符串,输出YES或者NO。


思路:只要判断出现的字母的次数能否完全一一对应即可,比如s1存在出现3次的字符,那么s2中也必须存在这样的字符。


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 105;char s1[MAXN], s2[MAXN];int num1[MAXN], num2[MAXN], v1[MAXN], v2[MAXN];int main() {    while (gets(s1) != NULL) {        gets(s2);         int len = strlen(s1), flag = 1;        memset(num1, 0, sizeof(num1));        memset(num2, 0, sizeof(num2));        memset(v1, 0, sizeof(v1));        memset(v2, 0, sizeof(v2));        for (int i = 0; i < len; i++) {            num1[s1[i] - 'A']++;            num2[s2[i] - 'A']++;         }        for (int i = 0; i < 26; i++) {            v1[num1[i]]++;             v2[num2[i]]++;         }        for (int i = 0; i < 26; i++) {            if (v1[i] != v2[i]) {                flag = 0;                 break;            }        }        if (flag)            printf("YES\n");        else            printf("NO\n");    }    return 0;}


0 0
原创粉丝点击