Ancient Cipher 【字串+排序】【紫書例題4.1】
阿新 • • 發佈:2018-12-26
題意:給定兩個字串,你可以替換或者置換,替換是指可以將相同的字母替換為任意一個字母,而置換是指將字母替換為下一個,如A替換B,B替換為C,,,Z替換為A。你需要判斷是否可以通過一系列操作使兩個字串相等。
思路:既然可以替換和置換,那麼我們就可以用兩個陣列統計兩個字串中各個字母出現的次數,因為可以隨意替換,隨意我們只需要將兩個陣列排序,然後比較兩個陣列是否相等即可。
程式碼:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { char str1[105],str2[105]; while(~scanf("%s%s",str1,str2)) { int len=strlen(str1); int cnt1[26]={0},cnt2[26]={0}; for(int i=0;i<len;i++) { cnt1[str1[i]-'A']++; cnt2[str2[i]-'A']++; } sort(cnt1,cnt1+26); sort(cnt2,cnt2+26); int flag=0; for(int i=1;i<26;i++) if(cnt1[i]!=cnt2[i]) { flag=1;//如果有不相等的 break; } if(flag) printf("NO\n"); else printf("YES\n"); } return 0; }