문제 풀이

제출한 코드

import java.util.HashMap;

class Solution {
    public static boolean buddyStrings(String s, String goal) {
        int sLen = s.length();
        if (sLen != goal.length()) {
            return false;
        }
        HashMap original = new HashMap<Character, Integer>();
        HashMap target = new HashMap<Character, Integer>();

        char[] originalChar = s.toCharArray();
        char[] targetChar = goal.toCharArray();

        int cnt = 0;

        for (int i = 0; i < sLen; i++) {
            if (originalChar[i] != targetChar[i]) {
                if (++cnt >= 3) {
                    return false;
                }
            }
            if (original.containsKey(originalChar[i])) {
                int cntOriginal = (int) original.get(originalChar[i]);
                original.put(originalChar[i], ++cntOriginal);
            } else {
                original.put(originalChar[i], 1);
            }

            if (target.containsKey(targetChar[i])) {
                int cntTarget = (int) target.get(targetChar[i]);
                target.put(targetChar[i], ++cntTarget);
            } else {
                target.put(targetChar[i], 1);
            }
        }

        boolean notEnoughChar = original.values().stream().allMatch(it -> (int) it <= 1);

        if (notEnoughChar) {
            if (s.equals(goal)) {
                return false;
            }
        }

        for (Object key : original.keySet()) {
            if (!target.containsKey(key)) {
                return false;
            }
            int originalCnt = (int) original.get(key);
            int targetCnt = (int) target.get(key);
            if (originalCnt != targetCnt) {
                return false;
            }
        }
        return true;
    }
}

잘한점

개선할점