過年弄得也沒寫代碼了,最近開始繼續奮斗?
* * *
問題描述?
Anagrams指的是具有如下特性的兩個單詞:在這兩個單詞當中,每一個英文字母(不區分大小寫)所出現的次數都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。編寫一個程序,輸入兩個單詞,然后判斷一下,這兩個單詞是否是Anagrams。每一個單詞的長度不會超過80個字符,而且是大小寫無關的。?
輸入格式:輸入有兩行,分別為兩個單詞。?
輸出格式:輸出只有一個字母Y或N,分別表示Yes和No。?
輸入輸出樣例?
樣例輸入?
Unclear?
Nuclear?
樣例輸出?
Y
## 笨方法
一開始沒看懂題目,用了笨方法,就是把每個字母出現的次數記錄下來,得了80分,錯了兩組數據,因為不是VIP暫時看不到數據,想了想也不知道錯在哪
~~~
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str1 = input.next();
String str2 = input.next();
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
if (str1.length()!=str2.length()){
System.out.println("N");
System.exit(0);
}
input(str1,str2);
}
/**
*接收兩個串,然后比較
*/
private static void input(String str1,String str2){
int[] arr1 = new int[str1.length()];
int[] arr2 = new int[str2.length()];
for (int i = 0; i < str1.length(); i++) {
arr1[i] = judge(str1.charAt(i),str1);
}
for (int i = 0; i < str2.length(); i++) {
arr2[i] = judge(str2.charAt(i),str2);
}
for (int i = 1; i < str1.length(); i++) {
if (arr1[0] !=arr1[i]){
System.out.println("N");
return;
}
}
for (int i = 1; i < str2.length(); i++) {
if (arr2[0] !=arr2[i]){
System.out.println("N");
return;
}
}
System.out.println("Y");
}
/*
計算字母在一個字符串中出現的次數
*/
private static int judge(char a,String str){
int start = 0,count = 0;
while ((start = str.indexOf(a, start)) >= 0){
start++;
count++;
}
return count;
}
}
~~~
## 簡單方法
先排序,然后直接比較排序后的數組是否相等即可
~~~
private static void judge1(String str1,String str2){
char[] a = str1.toCharArray();
char[] b = str2.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
if (Arrays.equals(a,b)){
System.out.println("Y");
}else {
System.out.println("N");
}
}
~~~