본문 바로가기
JAVA/Coding Test Study

[Easy] LeetCode - no.242 Valid Anagram : Java

by ♡˖GYURI˖♡ 2024. 10. 17.
728x90

https://leetcode.com/problems/valid-anagram/description/?envType=study-plan-v2&envId=top-interview-150

 

 

문제

String s와 t가 주어졌을 때, t가 s의 anagram인지 여부 판단

Example 1:
Input: s = "anagram", t = "nagaram"
Output: true

Example 2:
Input: s = "rat", t = "car"
Output: false

 

 

 

 

풀이1

  public static boolean isAnagram(String s, String t) {
    Map<Character, Integer> map = new HashMap<>();

    if (s.length() != t.length()) {
      return false;
    }

    for (char c : s.toCharArray()) {
      map.put(c, map.getOrDefault(c, 0) + 1);
    }

    for (char c : t.toCharArray()) {
      if (map.containsKey(c) && map.get(c) > 0) {
        map.put(c, map.get(c) - 1);
      } else {
        return false;
      }
    }

    return true;
  }
  • HashMap 사용
  • s와 t의 길이가 다르면 false 반환
  • s의 char을 map에 저장 : 이 때 value는 등장 횟수
  • t.toCharArray()를 순회
    • map에 해당 key값이 존재하는지와 map.get(c)의 value가 0보다 큰지 여부 판단
      • true → map.put(c, map.get(c) - 1) : 등장 횟수 - 1
      • false → false 반환
  • 시간복잡도 : O(N)

 

 

풀이2

  public static boolean isAnagram2(String s, String t) {
    char[] sArr = s.toCharArray();
    char[] tArr = t.toCharArray();

    Arrays.sort(sArr);
    Arrays.sort(tArr);

    return Arrays.equals(sArr, tArr);
  }
  • s와 t를 각각 char 배열로 변환
  • Arrays.sort()
  • t가 s의 anagram이라면 Arrays.sort() 후, 두 배열이 서로 같아야 함 → 일치 여부 반환