[LeetCode] 242 Valid Anagram

황은하·2021년 5월 14일
0

알고리즘

목록 보기
35/100
post-thumbnail

Description

Given two strings s and t, return true if t is an anagram of s, and false otherwise.

Example 1:

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

Example 2:

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

Constraints:

  • 1 <= s.length, t.length <= 5 * 10^4
  • s and t consist of lowercase English letters.

Follow up:

What if the inputs contain Unicode characters? How would you adapt your solution to such a case?


풀이

문자열에서 문자들의 종류와 개수가 모두 같은지 파악한다.

  • 해시맵: 문자와 개수를 넣고 두 문자열이 같은지 파악한다.
  • 배열: 배열에 한 문자씩 잘라서 넣고 정렬하여 그 배열이 같은지 확인한다.

코드

해시맵 이용

class Solution {
    public boolean isAnagram(String s, String t) {
        int count = 0;
        
        if (s.length() != t.length()){
            return false;
        }
        
        String[] arr1 = s.split("");
        HashMap<String, Integer> hm1 = new HashMap<>();
        for (String ss : arr1) {
            hm1.put(ss, hm1.getOrDefault(ss, 0) + 1);
        }

        String[] arr2 = t.split("");
        HashMap<String, Integer> hm2 = new HashMap<>();
        for (String ss : arr2) {
            hm2.put(ss, hm2.getOrDefault(ss, 0) + 1);
        }

        for (Map.Entry<String, Integer> entry : hm1.entrySet()) {
            if (hm2.containsKey(entry.getKey()) && hm2.get(entry.getKey()).equals(entry.getValue())) {
                count++;
            }
        }

        if (count == hm1.size()) {
            return true;
        }
        return false;
    }
}

배열 이용

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()){
            return false;
        }
        
        String[] arr1 = s.split("");
        String[] arr2 = t.split("");
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        
        for (int i = 0; i < arr1.length; i++) {
            if (!arr1[i].equals(arr2[i])) {
                return false;
            }
        }
        return true;
    }
}
profile
차근차근 하나씩

0개의 댓글