Programming/Coding Test

[Leetcode/Hashmap] 242. Anagram (feat.Java)

빠모스 2023. 7. 16. 20:19
반응형

https://leetcode.com/problems/valid-anagram/

class Solution {
    public boolean isAnagram(String s, String t) {
        HashMap<Character, Integer> hm = new HashMap<>();
        boolean answer = true;

		// s의 캐릭터를 hm에 담는다. 
        // key에 없으면 1로 디폴트 세팅, 있으면 값에 +1
        for(int i = 0; i < s.length(); i++){
            if(hm.containsKey(s.charAt(i))){
                System.out.print(hm.get(s.charAt(i)));
                hm.put(s.charAt(i), hm.get(s.charAt(i))+1);
            } else {
                hm.put(s.charAt(i), 1);
            }
        }

		/ t의 캐릭터가 hm에 없으면 바로 false,
        // t의 캐릭터가 hm에 있지만 0일때(모두 체크했는데 t에 더 남아있을 때) 바로 false
        // 그 외 정상 케이스는 값에서 -1
        for(int i = 0; i < t.length(); i++){
            if(!hm.containsKey(t.charAt(i))){
                answer = false;
                return answer;
            } else {
                if(hm.get(t.charAt(i)) == 0){
                    answer = false;
                    return answer;
                } else {
                    hm.put(t.charAt(i), hm.get(t.charAt(i))-1);
                }
            }
        }

		// hm의 value가 모두 0(모든 철자가 한번씩만 등장)일때만 anagram true
        for (Integer val : hm.values()) {
            if(val != 0){
                answer = false;
                return answer;
            }
        }


        return answer;
    }
}
반응형