题意:
一對字符串各有n個大寫字母,如果能組合出一個映射表的話則输出YES,否則NO.
分析:
簡單題,可以先對組字符串每個字符出現次數進行統計,然後排序,接着比較,時間複雜度O(n).
Code:
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define DIR 4
#define DIM 2
#define STATUS 2
#define MAXM 30
#define MAXN 1000 + 10
#define oo (~0u)>>1
#define INF 0x3F3F3F3F
#define REPI(i, s, e) for(int i = s; i <= e; i ++)
#define REPD(i, e, s) for(int i = e; i >= s; i --)
static const double EPS = 1e-5;
int hasha[MAXM], hashb[MAXM];
char stra[MAXN], strb[MAXN];
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
while( ~scanf("%s %s", stra, strb) ) {
memset(hashb, 0, sizeof(hashb));
memset(hasha, 0, sizeof(hasha));
int la = strlen(stra)-1;
int lb = strlen(strb)-1;
REPI(i, 0, la) {
hasha[stra[i]-'A'] += 1;
}
REPI(i, 0, lb) {
hashb[strb[i]-'A'] += 1;
}
sort(hasha, hasha+MAXM);
sort(hashb, hashb+MAXM);
int flag = 0;
REPI(i, 0, MAXM-1) {
if( hasha[i] != hashb[i] ) {
flag = 1;
break;
}
}
if( !flag ) {
printf("YES\n");
continue;
}
printf("NO\n");
}
return 0;
}