首页 > 编程 > Java > 正文

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

2019-11-10 22:57:42
字体:
来源:转载
供稿:网友

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

问题描述

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

输入格式

输入有两行,分别为两个单词。

输出格式

输出只有一个字母Y或N,分别表示Yes和No。

输入样例

Unclear Nuclear

输出样例

Y

思考

这道题我用一个数组统计第一个字串自身字母出现的个数,另外一个数组统计第一个字串的中的字母在第二个字串中出现的次数。使用for循环来进行遍历统计操作,详细请看代码注释

代码

package com.test;import java.util.Scanner;public class ALGO_91 { public static void main(String[] args) { String str1 = "",str2 = "" ; Scanner scanner = new Scanner(System.in) ; if(scanner.hasNext()){ //分别输入两个字串 str1 = scanner.next() ; str2 = scanner.next() ; } if(str1.length() != str2.length()){ //两个字符串不相等,绝对不是Anagrams System.out.PRintln("N"); return ; } //将两个字串中的所有字母都转换为大写字母,避免出现大小写不匹配的问题 str1 = str1.toUpperCase() ; str2 = str2.toUpperCase() ; int count1[] = new int[str1.length()] ; //声明一个数组统计str1中所有字母分别出现的次数 for(int i = 0 ; i < str1.length() ; i++){ char ch1 = str1.charAt(i) ; //取出str1的第i个字母 for(int j = 0 ; j < str1.length() ; j++){ //将ch1与字串str1中所有的字母进行比较,统计ch1出现的次数 char ch2 = str1.charAt(j) ; if(ch1 == ch2){ count1[i] ++ ; } } } int count2[] = new int[str2.length()] ; //声明一个数组统计str1中字母在str2中出现的次数 for(int i = 0 ; i < str1.length() ; i++){ char ch1 = str1.charAt(i) ; for(int j = 0 ; j < str2.length() ; j++){ char ch2 = str2.charAt(j) ; if(ch1 == ch2){ count2[i] ++ ; if(count2[i] > count1[i]){ //若str2中的ch1出现的次数大于str1中ch1出现的次数,则这两个字串绝对不是Anagrams System.out.println("N"); return ; } } } if(count1[i] != count2[i]){ //若str2中的ch1出现的次数不等于str1中ch1出现的次数,则这两个字串绝对不是Anagrams System.out.println("N"); return ; } } System.out.println("Y"); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表