Home [HackerRank] Java Anagrams
Post
Cancel

[HackerRank] Java Anagrams

[HackerRank] Java Anagrams

Ploblem

스크린샷 2020-06-24 오전 2 33 07

스크린샷 2020-06-24 오전 2 33 26

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");
		}
	}

Code Repo

Refference

This post is licensed under CC BY 4.0 by the author.

Spring AOP 이야기 - AOP는 언제 써야할까?

[kubernetes-in-action] 1. 쿠버네티스 소개

Comments powered by Disqus.