标签:
题目大意:给定两个长度相同且不超过100个字符的字符串,判断能否把其中一个字符串重排后,然后对26个字母一一做一个映射,使得两个字符串相同
解题思路:字母可以重排,那么次序便不重要,可以分别统计两个字符串中的各个字母出现的次数,得到两个cnt[26]数组,
又由于可以进行映射,则可以直接对两个数组进行排序后判断是否相等(相当于原来相等的值的两个地方做映射)
/* UVa 1339 Ancient Cipher --- 水题 */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char a[105], b[105]; int cnt1[30], cnt2[30]; int main() { #ifdef _LOCAL freopen("D:\\input.txt", "r", stdin); #endif while (scanf("%s%s", a, b) == 2){ memset(cnt1, 0, sizeof cnt1); memset(cnt2, 0, sizeof cnt2); int len1 = strlen(a); int len2 = strlen(b); //0-25记录A-Z for (int i = 0; i < len1; ++i){ ++cnt1[a[i] - ‘A‘]; ++cnt2[b[i] - ‘A‘]; } sort(cnt1, cnt1 + 26); sort(cnt2, cnt2 + 26); bool flag = 1; for (int i = 0; i < 26; ++i){ if (cnt1[i] != cnt2[i]){ flag = 0; break; } } printf("%s\n", flag ? "YES" : "NO"); } return 0; }
UVa 1339 Ancient Cipher --- 水题
标签:
原文地址:http://www.cnblogs.com/tommychok/p/5357616.html