본문 바로가기
Algorithm/LeetCode

Leetcode - 242 . Valid Anagram

by HaningYa 2020. 4. 10.
728x90

 

How to effectively use LeetCode to prepare for interviews!! - LeetCode Discuss

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

Valid Anagram - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 


문제

Given two strings s and t , write a function to determine if t is an anagram of s.

Example 1:

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

Output: true

 

Example 2:

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

Output: false

 

Note:
You may assume the string contains only lowercase alphabets.

Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?

 


같은 알파벳으로 이루어진 단어들을 anagram 이라 하는가 보다.

 

제일 먼저 생각난 방법은 char array 를 만들어 sort 한 뒤 비교해 보는 거였다.

(sort 를 하면 순서가 똑같아 지기 때문이다.)

import java.util.*;

class Solution {
    public boolean isAnagram(String s, String t) {
        
        char[] chararray1 = new char[s.length()];
        char[] chararray2 = new char[t.length()];
        
        for(int i = 0 ; i < s.length() ;i++){
            chararray1[i] = s.charAt(i);
        }
        
        for(int i = 0 ; i < t.length() ;i++){
            chararray2[i] = t.charAt(i);
        }
        
        Arrays.sort(chararray1);
        Arrays.sort(chararray2);
     
        if(Arrays.equals(chararray1, chararray2)){
            return true;
        }else{
            return false;
        }
    }
}

일단 통과

Success

Details 

Runtime: 4 ms, faster than 37.39% of Java online submissions for Valid Anagram.

Memory Usage: 40.3 MB, less than 5.16% of Java online submissions for Valid Anagram.

 

Follow up 에서 유니코드 문자가  있을 때 어떻게 할 건지 생각해 보라고 한다.

 

지금 방식대로 해도 될 것 같다.

 

다른 풀이

신박한 풀이가 있다.

 

 

Accepted Java O(n) solution in 5 lines - LeetCode Discuss

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

public class Solution {
    public boolean isAnagram(String s, String t) {
        int[] alphabet = new int[26];
        for (int i = 0; i < s.length(); i++) alphabet[s.charAt(i) - 'a']++;
        for (int i = 0; i < t.length(); i++) alphabet[t.charAt(i) - 'a']--;
        for (int i : alphabet) if (i != 0) return false;
        return true;
    }
}

 

 

알파벳을 담은 26 크기의 array를 만들고 s는 increment t는 decrement 한다.

만약 anagram 일 경우 alphabet array는 모두 0이여야 한다. 

 

내가 배열을 sort 하는 대신 HashMap을 사용한 풀이도 있었다.

 

[Java] HashMap - LeetCode Discuss

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

public boolean isAnagram(String s, String t) {
    if (s.length() != t.length()) {
        return false;
    }
    if (s == null && t == null) {
        return true;
    }
    Map<Character, Integer> maps = new HashMap<>();
    for (char c : s.toCharArray()) {
        maps.put(c, maps.getOrDefault(c, 0) + 1);
    }
    Map<Character, Integer> mapt = new HashMap<>();
    for (char c : t.toCharArray()) {
        mapt.put(c, mapt.getOrDefault(c, 0) + 1);
    }
    
    if (maps.equals(mapt)) {
        return true;
    }
    else {
        return false;
    }
}

hashmap 은 순서가 없으니 그냥 sort 가 필요없다.

 

끗.

728x90

댓글