1. 程式人生 > >uvaoj1339 - Ancient Cipher(思維題,排序,字串加密)

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 }