UVA1339

📅 2026/7/2 3:01:42
UVA1339
UVA1339 古老的密码 Ancient Cipher题目描述给定两个长度相同且不超过100100100的字符串仅由大写字母构成判断是否能把其中一个字符串的各个字母重排然后对262626个字母做一个一一映射使得两个字符串相同。若可以输出YES\texttt{YES}YES否则输出NO\texttt{NO}NO。输入格式本题多测。每个测试点内有不定数量个数据以EOF\text{EOF}EOF为结尾。对于每一组数据输入两行每行分别为一个字符串。输出格式对于每一组数据输出一行每行一个字符串表示是否可以达到。输入输出样例 #1输入 #1JWPUDJSTVP VICTORIOUS MAMA ROME HAHA HEHE AAA AAA NEERCISTHEBEST SECRETMESSAGES输出 #1YES NO YES YES NO说明/提示Translated by user 726139。样例解释对于样例中的第一组数据JWPUDJSTVP\texttt{JWPUDJSTVP}JWPUDJSTVP重排后可以得到WJDUPSJPVT\texttt{WJDUPSJPVT}WJDUPSJPVT然后把每个字母映射到它的前一个字母即B→A,C→B,⋯ ,Z→Y,A→Z\texttt{B}\to\texttt{A},\texttt{C}\to\texttt{B},\cdots,\texttt{Z}\to\texttt{Y},\texttt{A}\to\texttt{Z}B→A,C→B,⋯,Z→Y,A→Z得到VICTORIOUS\texttt{VICTORIOUS}VICTORIOUS。解题思路题目允许将任意一个字符串打乱重排再为 26 个大写字母建立一对一映射判断能否让两个字符串完全相同等价于两个字符串统计各字母出现次数得到的 26 位频次数组排序后完全一致。解题流程为循环读取成对字符串直至输入结束分别统计两组字符串中 A-Z 每个字母的出现次数存入两个长度 26 的数组对两个频次数组升序排序后逐位对比全部数值相等则输出 YES存在数值不同则输出 NO。完整代码importjava.util.Arrays;importjava.util.Scanner;publicclassAncientCipher{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);while(sc.hasNext()){Stringstr1sc.nextLine();Stringstr2sc.nextLine();int[]count1newint[26];int[]count2newint[26];for(inti0;istr1.length();i){charc1str1.charAt(i);intidx1c1-A;count1[idx1];}for(inti0;istr2.length();i){charc2str2.charAt(i);intidx2c2-A;count2[idx2];}Arrays.sort(count1);Arrays.sort(count2);booleanflagtrue;for(inti0;i26;i){if(count1[i]!count2[i]){flagfalse;break;}}System.out.println(flag?YES:NO);}sc.close();}}