#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <memory.h>
using namespace std;
int main()
{ int i,n,a[30],b[30];
char org[200],code[200];
bool judge;
//freopen("in.txt","r",stdin);
scanf("%s%s",code,org);
n=strlen(org);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (i=0;i<n;i++) a[org[i]-'A'+1]++;
for (i=0;i<n;i++) b[code[i]-'A'+1]++;
sort(a+1,a+27);
sort(b+1,b+27);
judge=true;
for (i=1;i<=26;i++)
if (a[i]!=b[i])
{
judge=false;
break;
}
if (judge==true) cout<<"YES";else cout<<"NO";
return 0;
}
一開始把題意理解錯了,將substitution cipher (置換密碼):當做按字典序偏移任意個位置。
明文與密文的“字母頻率的數組”應該是一樣的,即明文中某字母出現8次,密文中也必須有某個字母出現8次。
所以字母種類,字母頻率同時相等時,即被破解。