-
问题描述
Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
输入格式:输入有两行,分别为两个单词。
输出格式:输出只有一个字母Y或N,分别表示Yes和No。
输入输出样例 -
样例输入
Unclear Nuclear
-
样例输出
Y
-
解题思路
本题主要考察单词计数问题,通过比较单词出现的次数来判断是否符合题目定义Anagrams。首先将两个字符串转换为小写(或者大写),方便后面比较,比较函数里用switch循环判断每个单词出现了多少次,最后通过比较出现的次数是否相同来输出Y,N。
注意:比较函数比较26个英文字母比较麻烦,因此需要细心,我用的是一种通俗易懂的方法,但是代码观赏性不好,如果各位大佬有更好的方法欢迎在下方评论里指正。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String vocabulary1 = sc.next();
String vocabulary2 = sc.next();
//将两个字符串转换为小写
vocabulary1=vocabulary1.toLowerCase();
vocabulary2=vocabulary2.toLowerCase();
compare(vocabulary1,vocabulary2);
}
private static void compare(String vocabulary1, String vocabulary2) {
// 比较两个单词是否Anagrams
boolean flag = true;
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;
int a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,i1=0,j1=0,k1=0,l1=0,m1=0,n1=0,o1=0,p1=0,q1=0,r1=0,s1=0,t1=0,u1=0,v1=0,w1=0,x1=0,y1=0,z1=0;
if(vocabulary1.length()!=vocabulary2.length()){
flag=false;
}else{
//计算第一个单词每个字母出现了多少次
for (int index = 0; index < vocabulary1.length(); index++) {
switch(vocabulary1.charAt(index)){
case 'a': a++;break;
case 'b': b++;break;
case 'c': c++;break;
case 'd': d++;break;
case 'e': e++;break;
case 'f': f++;break;
case 'g': g++;break;
case 'h': h++;break;
case 'i': i++;break;
case 'j': j++;break;
case 'k': k++;break;
case 'l': l++;break;
case 'm': m++;break;
case 'n': n++;break;
case 'o': o++;break;
case 'p': p++;break;
case 'q': q++;break;
case 'r': r++;break;
case 's': s++;break;
case 't': t++;break;
case 'u': u++;break;
case 'v': v++;break;
case 'w': w++;break;
case 'x': x++;break;
case 'y': y++;break;
case 'z': z++;break;
}
}
//计算第二个单词每个字母出现了多少次
for (int index = 0; index < vocabulary2.length(); index++) {
switch(vocabulary2.charAt(index)){
case 'a': a1++;break;
case 'b': b1++;break;
case 'c': c1++;break;
case 'd': d1++;break;
case 'e': e1++;break;
case 'f': f1++;break;
case 'g': g1++;break;
case 'h': h1++;break;
case 'i': i1++;break;
case 'j': j1++;break;
case 'k': k1++;break;
case 'l': l1++;break;
case 'm': m1++;break;
case 'n': n1++;break;
case 'o': o1++;break;
case 'p': p1++;break;
case 'q': q1++;break;
case 'r': r1++;break;
case 's': s1++;break;
case 't': t1++;break;
case 'u': u1++;break;
case 'v': v1++;break;
case 'w': w1++;break;
case 'x': x1++;break;
case 'y': y1++;break;
case 'z': z1++;break;
}
}
//比较两个单词字母出现个数是否相同
if(a==a1&&b==b1&&c==c1&&d==d1&&e==e1&&f==f1&&g==g1
&&h==h1&&i==i1&&j==j1&&k==k1&&l==l1&&m==m1
&&n==n1&&o==o1&&p==p1&&q==q1&&r==r1&&s==s1
&&t==t1&&u==u1&&v==v1&&w==w1&&x==x1&&y==y1&&z==z1){
flag=true;
}else{
flag=false;
}
}
if(flag){
System.out.println("Y");
}else{
System.out.println("N");
}
}
}