uvaoj1339 - Ancient Cipher(思维题,排序,字符串加密)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4085

两个字符串,判断能否把其中一个字符串重排,然后对每个字母进行映射(比如映射到前一个字母),使得两个字符串相同

这里要转一个弯,既然字母可以重排,那么每个字母最初的顺序并不重要,重要的是每个字母出现的次数,所以只要分别用数组保存每个字母出现的次数,在把这个数组从小到大排序,如果最后两个数组相同,那么这个问题的结果就是YES(可以使两个字符串相同)、

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s1[105],s2[105];
 4 int a[26],b[26];
 5 int main()
 6 {
 7     while(~scanf("%s %s",s1,s2))
 8     {
 9         
10         memset(a,0,sizeof(a));
11         memset(b,0,sizeof(b));
12         for(int i=0; i<strlen(s1); i++)
13         {
14             a[s1[i]-'A']++;
15         }
16         for(int i=0; i<strlen(s2); i++)
17         {
18             b[s2[i]-'A']++;
19         }
20         sort(a,a+26);
21         sort(b,b+26);
22         int ans=1;
23         for(int i=0; i<26; i++)
24         {
25             if(a[i]!=b[i])
26             {
27                 ans=0;
28                 break;
29             }
30         }
31         if(ans)printf("YES\n");
32         else printf("NO\n");
33         memset(s1,'\0',sizeof(s1));
34         memset(s2,'\0',sizeof(s2));
35     }
36 
37     return 0;
38 }

猜你喜欢

转载自www.cnblogs.com/fqfzs/p/9944431.html