题意:原来字母变换不一定只是加一,排列也不一定是按照案例来的。。。被虐了。。。
思路:只要统计出两个字符串中字符的个数,然后用一次排序,来看是否满足映射关系就可以。
例如统计个数的数组a,b应该是
0,1
1,0
0,0
0,2
2,0
...
这样就是如果右边的原始字符数组是加一变换的话,坐标的数组统计的个数就会相应的下移一格。。。加二,加三依次类推,所以用一次快排,然后比较即可。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
char str[105];
char st[105];
int a[26],b[26];
int len1,len2;
while(scanf("%s%s",str,st)!=EOF)
{
len1=strlen(str);
len2=strlen(st);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
if(len1!=len2)
{printf("NO\n");continue;}
for(int i=0;i<len1;i++)
a[str[i]-'A']++;
for(int i=0;i<len2;i++)
b[st[i]-'A']++;
//for(int i=0;i<26;i++)
//printf("%d %d\n",a[i],b[i]);
//system("pause");
sort(a,a+26);
sort(b,b+26);
int k;
for(k=0;k<26;k++)
{
//printf("%d,%d\n",a[k],b[k]);
if(a[k]!=b[k]) break;
}
if(k==26) printf("YES\n");
else printf("NO\n");
}
}