1501101124-蓝桥杯-算法训练 Anagrams问题

算法训练 Anagrams问题  
时间限制:1.0s   内存限制:512.0MB
    
问题描述
  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例
样例输入
Unclear
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");
	}
}


你可能感兴趣的:(1501101124-蓝桥杯-算法训练 Anagrams问题)