Leetcode 242) Valid Anagram

image

  • set은 중복 불가, list 중복 가능.
  • 이거는 아나그램보다는 , 스트링?할때.. 더 유용할 듯.
import java.util.*;
class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()){
            return false;
        }
        Map<Character,Integer> smap=new HashMap<>();  
        Map<Character,Integer> tmap=new HashMap<>();  

        boolean result;
        for(int i =0;i<s.length();i++){
            if(smap.containsKey(s.charAt(i))){
                int val =smap.get(s.charAt(i));
                smap.put(s.charAt(i),++val);
            }else{
                smap.put(s.charAt(i),1);
            }
        }

        for(int i =0;i<t.length();i++){
            if(tmap.containsKey(t.charAt(i))){
                int val =tmap.get(t.charAt(i));
                // tmap.put(t.charAt(i),val++); 일케하면 더하기 안됐다..
                tmap.put(t.charAt(i),++val);
            }else{
                tmap.put(t.charAt(i),1);
            }
        }


        if (smap.equals(tmap)){
            result= true;
        }else{
            result=false;
        }
        System.out.println(smap);
        System.out.println(tmap);

        return result;

    }
}

다른 방법

  • character array로 만들어서 sort 한 후에 비교 (아주 간단하다..!)
lass Solution {
    public boolean isAnagram(String s, String t) {

        if(s.length() != t.length())return false;
        char[] a = s.toCharArray();
        char[] b = t.toCharArray();
        Arrays.sort(a);
        Arrays.sort(b);
        return Arrays.equals(a,b);
    }
}
  • 길이가 26인 어레이를 만든다 (알파벳이 26개니까.)
  • 각각 인덱스 0~25는 a~z를 나타낸다.
  • 맨 처음 어레이에서 알파벳 어레이에 표시하고, 두번째 어레이에서는 알파벳 어레이의 값을 읽어들인 후 판단한다.
class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }

        int[] sCounts = new int[26];
        for (char c : s.toCharArray()) {
            sCounts[c - 'a']++;
        }
        //이게 working 하는 이유는, 앞에서 length가 같은걸로 한번 걸러냈으니까!
        for (char c : t.toCharArray()) {
            if (sCounts[c - 'a'] == 0) {
                return false;
            }
            sCounts[c - 'a']--;
        }

        return true;
    }
}

© 2018. All rights reserved.

Powered by Hydejack v8.5.2