poj 2159 字母映射

来源:互联网 发布:迅雷知乎 编辑:程序博客网 时间:2024/06/05 05:23

题意:原来字母变换不一定只是加一,排列也不一定是按照案例来的。。。被虐了。。。

思路:只要统计出两个字符串中字符的个数,然后用一次排序,来看是否满足映射关系就可以。

例如统计个数的数组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");  }}


原创粉丝点击