一、问题描述
原题见
大意是说给出两个相等长度的字符串,问可否通过置换加密和变换加密码将一个字符串变成另一个字符串。其中置换加密是把一个字符变成另一个字符,这个变换是一一对应的;变换加密是将字符串中各字符的位置打乱然后重新排列。
二、分析解答
因为题目并没有给出具体的转换和变换方法,因此只有有一种方法可以就输出YES,因此只有从字符的出现次数来分析,将两个字符串中各字符出现次数分别统计出来,然后按从小到大进行排序,然后比较两个次数数组是否完全相等,完全相等输出YES,否则输出NO。
三、代码
#include<iostream> #include<string> #include<algorithm> using namespace std; char a[105]; char b[105]; int fa[26]; int fb[26]; int main() { int i; cin>>a; cin>>b; int len=strlen(a); memset(fa,0,sizeof(fa)); memset(fb,0,sizeof(fb)); for(i=0;i<len;++i) { fa[a[i]-65]++; fb[b[i]-65]++; } sort(fa,fa+26); sort(fb,fb+26); for(i=0;i<26;++i) { if(fa[i]!=fb[i]) { cout<<"NO"<<endl; return 0; } } cout<<"YES"<<endl; return 0; }
|
阅读(771) | 评论(0) | 转发(0) |