您的位置:首页 > 编程语言 > Java开发

算法-蓝桥杯-算法训练 Anagrams问题 (JAVA)

2018-03-25 09:42 246 查看

1 引言

    新的一天,新的开始。今天的清晨分外美丽,阳光温柔,一切显得那么有魅力,那么美好。在饱览一番校园景色之后,开始一天的生活!

2 题目

问题描述
  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例
样例输入
Unclear
Nuclear
样例输出
Y

3 源代码(第一种)

import java.util.*;
class Main
{
public static void main(String[] agrs)
{
Scanner sc=new Scanner(System.in);
String s1=sc.nextLine();
String s2=sc.nextLine();
int sum1=0,sum2=0,i,j;
char[] ch1=s1.toCharArray();
char[] ch2=s2.toCharArray();
for(i=0;i<ch1.length;i++)
{
if(ch1[i]>='a'&&ch1[i]<='z')
ch1[i]=(char)(ch1[i]-'a'+'A');
sum1+=ch1[i];
}
for(j=0;j<ch2.length;j++)
{
if(ch2[j]>='a'&&ch2[j]<='z')
ch2[j]=(char)(ch2[j]-'a'+'A');
sum2+=ch2[j];
}
sc.close();
if(sum1==sum2)
System.out.println("Y");
else
System.out.println("N");
}
}

4 思路讲解(第一种)

    题目中要求判断某一字符串出现字母的次数,相同就输出“Y”,不同就输出“N”。我们可以想想,字母本身具有的属性是什么?ASCII码啊。想到这点,问题就好解决了。我们可以将输入的字符串,统一改变为大写或者小写,定以一个整形变量(sum),用来计算改变后字符串中字母的ASCII之和。判断两个和是否相等,相等“Y”不等“N”N,问题解决!

5 源代码(第二种)

import java.util.*;
class Main
{
public static void main(String[] agrs)
{
Scanner sc=new Scanner(System.in);
char[]  ch1=sc.nextLine().toLowerCase().toCharArray();
char[] ch2=sc.nextLine().toLowerCase().toCharArray();
sc.close();
if(ch1.length!=ch2.length)
{
System.out.println("N");
}
Arrays.sort(ch1);
Arrays.sort(ch2);
if(String.valueOf(ch1).equals(String.valueOf(ch2)))
System.out.println("Y");
else
System.out.println("N");
}
}

6 思路讲解(第二种)

    将输入的字符串统一转化为大写或者小写,然后对它们进行排序,再使用equas方法判断他们的内容是否相同,相同输出“Y”,不同就输出“N”。

7 结束语

    两种方法的解答,希望对您有所帮助。
    分享和帮助是人生一大乐事,希望可以帮助您。本人才疏学浅,如果有不当之处,还请批评指正。同时欢迎大家评论、点赞及转发!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息