Mock Interview: Apple #3

JJ·2021년 4월 12일
0

MockTest

목록 보기
24/60
post-thumbnail

Find Common Characters

class Solution {
    public List<String> commonChars(String[] A) {
        
        List<String> result = new ArrayList<String>();
        
        Map<Character, Integer> m = new HashMap<Character, Integer>();
        
        for (int i = 0; i < A[0].length(); i++) {
            m.put(A[0].charAt(i), m.getOrDefault(A[0].charAt(i), 0) + 1);
        }
        
        for (int j = 1; j < A.length; j++) {
            Map<Character, Integer> compare = new HashMap<Character, Integer>();
            String s = A[j];
            
            for (int k = 0; k < s.length(); k++) {
                char c = s.charAt(k);
                if (m.containsKey(c)) {
                    compare.put(c, Math.min(m.get(c), compare.getOrDefault(c, 0) + 1));
                }
            }
            
            m = compare;
        }
        
        for (Character k : m.keySet()) {
            for (int l = 0; l < m.get(k); l++) {
                result.add(k.toString());
            }
        }
        
        return result; 
    }
}

Runtime: 12 ms, faster than 24.91% of Java online submissions for Find Common Characters.
Memory Usage: 38.9 MB, less than 88.96% of Java online submissions for Find Common Characters.

어김없이 돌아온 내 사랑 쉬맵이~
쉬맵이를 2개 만들어 줘서 살아남는 놈들만 다음 스테이지로 넘겼읍니다~
원래는 갯수 하나하나 다 빼고 비교하고 했는데 Math.min을 넣어놓고 나의 성공시대 시작되었읍니다~~
그거 말고는 진짜 단순한듯..^^

Python 루션이

class Solution:
    def commonChars(self, A):
        res = collections.Counter(A[0])
        for a in A:
            res &= collections.Counter(a)
        return list(res.elements())

Runtime: 48 ms, faster than 67.90% of Python3 online submissions for Find Common Characters.
Memory Usage: 14.1 MB, less than 95.21% of Python3 online submissions for Find Common Characters.

루션이가 세상을 구한다..^^

Java 루션이

class Solution {
    public List<String> commonChars(String[] A) {
        int[] last = count(A[0]);
        for (int i = 1; i < A.length; i++) {
            last = intersection(last, count(A[i]));
        }
        List<String> arr = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            if (last[i] != 0) {
                char a = 'a';
                a += i;
                String s = String.valueOf(a);
                while (last[i] > 0) {
                    arr.add(s);
                    last[i]--;
                }
            }
        }
        return arr;
    }

    int[] intersection(int[] a, int[] b) {
        int[] t = new int[26];
        for (int i = 0; i < 26; i++) {
            t[i] = Math.min(a[i], b[i]);
        }
        return t;
    }

    int[] count(String str) {
        int[] t = new int[26];
        for (char c : str.toCharArray()) t[c - 'a']++;
        return t;
    }
}

Runtime: 1 ms, faster than 100.00% of Java online submissions for Find Common Characters.
Memory Usage: 39.2 MB, less than 40.99% of Java online submissions for Find Common Characters.

가끔은 쉬맵이를 버리고 dp 같은거도 좀 써야겠읍니다..^^
이게 100%네요

Split a String in Balanced Strings

class Solution {
    public int balancedStringSplit(String s) {
        //같을 동안 count up
        
        int result = 0; 
        
        int n = 1;
        char prev = s.charAt(0);
        
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == prev) {
                n++;
            } else {
                n--;
            }
            
            if (n == 0) {
                result++;
                prev = s.charAt(i);
            }
        }
        
        return result; 
    }
}

Runtime: 0 ms, faster than 100.00% of Java online submissions for Split a String in Balanced Strings.
Memory Usage: 36.6 MB, less than 77.82% of Java online submissions for Split a String in Balanced Strings.

R이든 L이든 처음 시작하는 것과 같음 더하고 다름 뺍니다
만약에 중간에 0이 되는 순간이 있음 앞뒤가 같을 타이밍이니 result 값을 1개씩 올려줍니다

이 코드가 만약에 앞뒤가 같은 String을 잡아내라고 했음 안됐겠지만 다행히 갯수만 물어봐서 + - 로 해결할 수 있읍니다~!

지금 루션이 보는데 저와 비슷하게 푼 사람은 없는 것 같은데 한번 올려볼까요..^^

0개의 댓글