UVA1588 换抵挡装置 Kickdown

    科技2025-10-09  13

    题目大意

    有a, b两个字符串判断是否能把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同。也就是说每个字母都有唯一的映射。 因为读错题意一直WA

    算法思路

    只要将a, b出现的所有字母映射到两个数组中,然后对数组排序,看两个数组是否相等就可以了。

    AC代码

    #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> using namespace std; const int N = 110; char a[N], b[N]; int cnt1[26], cnt2[26]; int main(void) { scanf("%s%s", a, b); int len = strlen(a); for(int i = 0; i < len; i++) { cnt1[a[i] - 'A']++; cnt2[b[i] - 'A']++; } sort(cnt1, cnt1 + 26); sort(cnt2, cnt2 + 26); bool flag = true; for(int i = 0; i < 26; i++) { if(cnt1[i] != cnt2[i]) { flag = false; break; } } if(flag) puts("YES"); else puts("NO"); return 0; }

    还学到了另一个大佬的用vector判断数组是否相等的代码

    #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> using namespace std; const int N = 110; char a[N], b[N]; vector<int> cnt1(26, 0), cnt2(26, 0); int main(void) { scanf("%s%s", a, b); int len = strlen(a); for(int i = 0; i < len; i++) { cnt1[a[i] - 'A']++; cnt2[b[i] - 'A']++; } sort(cnt1.begin(), cnt1.end()); sort(cnt2.begin(), cnt2.end()); if(cnt1 == cnt2) puts("YES"); else puts("NO"); return 0; }
    Processed: 0.014, SQL: 8