[HackerRank] Java Anagrams
Ploblem
My solution
- char별로 카운트해야 된다고 생각해서 Map에 넣고 Count를 한다음에 각 맵끼리 비교하는것으로 문제를 풀었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private void anagram(String a, String b) {
boolean anagram = isAnagram(a,b);
if(anagram) {
System.out.println("Anagrams");
} else {
System.out.println("Not Anagrams");
}
}
private boolean isAnagram(String a, String b) {
if(isValidParam(a, b)) {
return false;
}
Map<Character, Integer> aCountMap = makeCountMap(a);
Map<Character, Integer> bCountMap = makeCountMap(b);
log.debug("aCountMap : {}", aCountMap);
log.debug("bCountMap : {}", bCountMap);
return aCountMap.equals(bCountMap);
}
private Map<Character, Integer> makeCountMap(String a) {
Map<Character, Integer> countMap = new HashMap<>();
for(Character c : a.toLowerCase().toCharArray()) {
Integer count = Optional.ofNullable(countMap.get(c))
.map(cnt -> cnt + 1)
.orElse(1);
countMap.put(c, count);
}
return countMap;
}
private boolean isValidParam(String a, String b) {
return (a.length() <= 1 && a.length() <= 50 && b.length() <=1 && b.length() <= 50);
}
Simple solution
- 다른사람들이 손쉽게 풀이한 문제를 공유한다.
- 공간복잡도도 더 조금쓰면서 코드도 심플..(시무룩)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void othersAnagram(String a, String b) {
if (a.length() != b.length()) {
System.out.println("Not Anagrams");
return;
}
char[] a1 = a.toLowerCase().toCharArray();
char[] a2 = b.toLowerCase().toCharArray();
Arrays.sort(a1);
Arrays.sort(a2);
if(Arrays.equals(a1, a2)) {
System.out.println("Anagrams");
} else {
System.out.println("Not Anagrams");
}
}
Comments powered by Disqus.