首页 > 代码库 > UVA1339- Ancient Cipher
UVA1339- Ancient Cipher
题意:给定两个长度均为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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。