java的字符串处理,有涉及到HushMap和其他一些零散知识点的应用,作为初学者,这题就作为范例供来日所需。
原题链接:Java Anagrams
Two strings, and , are called anagrams if they contain all the same characters in the same frequencies. For example, the anagrams of CAT
are CAT
, ACT
, TAC
, TCA
, ATC
, and CTA
.
Complete the function in the editor. If and are case-insensitive anagrams, print “Anagrams”; otherwise, print “Not Anagrams” instead.
Input Format
The first line contains a string denoting . The second line contains a string denoting .
Constraints
Output Format
Print “Anagrams” if and are case-insensitive anagrams of each other; otherwise, print “Not Anagrams” instead.
Sample Input 0
anagram
margana
Sample Output 0
Anagrams
Explanation 0
Character | Frequency: anagram | Frequency: margana |
---|---|---|
A or a | 3 | 3 |
G or g | 1 | 1 |
N or n | 1 | 1 |
M or m | 1 | 1 |
R or r | 1 | 1 |
The two strings contain all the same letters in the same frequencies, so we print “Anagrams”.
Sample Input 1
anagramm
marganaa
Sample Output 1
Not Anagrams
Explanation 1
Character | Frequency: anagramm | Frequency: marganaa |
---|---|---|
A or a | 3 | 4 |
G or g | 1 | 1 |
N or n | 1 | 1 |
M or m | 2 | 1 |
R or r | 1 | 1 |
The two strings don’t contain the same number of a
‘s and m
‘s, so we print “Not Anagrams”.
Sample Input 2
Hello
hello
Sample Output 2
Anagrams
Explanation 2
Character | Frequency: Hello | Frequency: hello |
---|---|---|
E or e | 1 | 1 |
H or h | 1 | 1 |
L or l | 2 | 2 |
O or o | 1 | 1 |
The two strings contain all the same letters in the same frequencies, so we print “Anagrams”.
代码如下:
import java.io.*;
import java.util.*;
public class Solution {
static boolean isAnagram(String a, String b) {
if (a.length()!=b.length())
return false;
Map<Character, Integer> map = new HashMap<>();
a=a.toLowerCase();
b=b.toLowerCase();
for(int i=0;i<a.length();i++) {
char ch=a.charAt(i);
if(!map.containsKey(ch)) {
map.put(ch,1);
}
else {
Integer frequency = map.get(ch);
map.put(ch,++frequency);
}
}
for(int i=0;i<b.length();i++) {
char ch=b.charAt(i);
if(!map.containsKey(ch)) {
return false;
}
Integer frequency = map.get(ch);
if(frequency==0) {
return false;
}
else {
map.put(ch,--frequency);
}
}
return true;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a = scan.next();
String b = scan.next();
scan.close();
boolean ret = isAnagram(a, b);
System.out.println( (ret) ? "Anagrams" : "Not Anagrams" );
}
}
方法二:
import java.util.*;
public class Solution {
static boolean isAnagram(String s1, String s2) {
if (s1.length() != s2.length()) {
return false;
}
char[] a = s1.toLowerCase().toCharArray();
char[] b = s2.toLowerCase().toCharArray();
boolean anagram = true;
Arrays.sort(a);
Arrays.sort(b);
for(int i = 0; i < a.length; i++) {
if(a[i] != b[i]) {
anagram = false;
}
}
return anagram;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a = scan.next();
String b = scan.next();
scan.close();
boolean ret = isAnagram(a, b);
System.out.println( (ret) ? "Anagrams" : "Not Anagrams" );
}
}