算法训练 Anagrams问题
时间限制:1.0s 内存限制:512.0MB
问题描述
Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
输入格式:输入有两行,分别为两个单词。
输出格式:输出只有一个字母Y或N,分别表示Yes和No。
输入输出样例
输入格式:输入有两行,分别为两个单词。
输出格式:输出只有一个字母Y或N,分别表示Yes和No。
输入输出样例
样例输入
Unclear
Nuclear
Nuclear
样例输出
Y
解题思路
定义两个长度为26的数组,初始化为0,依次对照两个单词,依次判断每个单词的字母,如果是大写字母,就
numa[a[i]-'A']++ ;如果是小写字母,就numa[a[i]-'a']++
也就是说以numa下标为字母,然后numa[i]存储字母出现的个数。
java代码
package Anagrams问题;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
String a=input.nextLine();
String b=input.nextLine();
char[] ca=a.toCharArray();
char[] cb=b.toCharArray();
int[] numa=new int[26];
int[] numb=new int[26];
//以numa下标为字母,然后numa[i]存储字母出现的个数。
for(int i=0;i<a.length();i++)
{
//不用将单词全部变为大写或者全部变为小写,如果大写就-'A',如果小写就-'a'
if(ca[i]>='A'&&ca[i]<='Z')
numa[ca[i]-'A']++;
if(ca[i]>='a'&&ca[i]<='z')
numa[ca[i]-'a']++;
}
for(int i=0;i<b.length();i++)
{
if(cb[i]>='A'&&cb[i]<='Z')
numb[cb[i]-'A']++;
if(cb[i]>='a'&&cb[i]<='z')
numb[cb[i]-'a']++;
}
int ok=1;
for(int i=0;i<26;i++)
if(numa[i]!=numb[i])
{
ok=0;
break;
}
if(ok==1)
System.out.println("Y");
else
System.out.println("N");
}
}