CodeWars 열 세 번째 문제

Updated:

Scramblies

public class Scramblies {
    public static boolean scramble(String str1, String str2) {
        HashMap<Character, Integer> str1Map = new HashMap<Character, Integer>();

        for(char c : str1.toCharArray()){
            if(str1Map.containsKey(c) == false) {
                str1Map.put(c, 1);
            } else {
                str1Map.put(c, str1Map.get(c) + 1);
            }
        }

        for(char c : str2.toCharArray()){
            Integer count = str1Map.get(c);
            if(count == null || count == 0) {
                return false;
            } else {
                str1Map.put(c, count-1);
            }
        }

        return true;
    }
}

*나는 HashMap을 이용하여 풀었다. Map의 특성을 이용하여 풀었기 때문에 어렵지 않았다. 대부분 나랑 비슷하게 풀었다.

*아래는 솔루션에 나와 있던 코드인데 replaceFirst 메소드를 모르면 풀 수가 없을 것 같았다. 이건… 조금 무리일듯 하지만 이번 기회에 이런 메소드를 알게 되었다는 것에 만족했다.

*성능을 더 고려 했을 때 아래 코드에서 첫 줄의 제약조건을 거는 것은 좋은 것 같다. 이런 생각을 기르는 것은 좋은 것 같다.

if (str2.length() > str1.length()) 
    return false;
    
for (String s: str2.split("")) {
    if (!str1.contains(s))  return false;
    str1 = str1.replaceFirst(s,"");
}        

return true;

*replaceFirst(String a, String b) : 문자열에서 가장 첫 번째로 나타나는 문자열 a를 문자열 b로 변경