Interview Question - combine words using words

문 제 는 대개 다음 과 같다. 하나의 INPUT STRING ARRAY 1 예 를 들 어 CAT, DOG, 하나의 INPUT STRING ARRAY 2, 예 를 들 어 GAT, DOC, CD, GOAT, BAD, COOL 은 첫 번 째 INPUT ARRAY 의 자 모 를 모두 사용 해 야 한다 고 요구한다. 그리고 모든 자 모 는 한 번 만 사용 할 수 있 고 조합 할 수 있 는 INPUT STRING ARRAY 2 의 단어 조합 을 구 할 수 있다. 예 를 들 어 위의 이 예 를 들 어 반환 값 은 {GAT, DOC}, {CD, GOAT} 이다.
http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=201395
My code:
private int[] charSet = new int[26];
    private int charSum = 0;
    public List> wordSearchAnagram(List input1, List input2) {
        for (String s : input1) {
            for (char c : s.toCharArray()) {
                charSet[c - 'a']++;
                charSum++;
            }
        }
        List> ret = new ArrayList>();
        search(0, input2, new ArrayList(), ret, 0);
        return ret;
    }
    
    private void search(int begin, List input2, List group, List> ret, int counter) {
        if (counter > charSum) {
            return;
        }
        else if (counter == charSum) {
            int[] temp = Arrays.copyOf(charSet, 26);
            for (String s : group) {
                for (char curr : s.toCharArray()) {
                    temp[curr - 'a']--;
                    if (temp[curr - 'a'] < 0) {
                        return;
                    }
                }
            }
            ret.add(new ArrayList(group));
        }
        else {
            for (int i = begin; i < input2.size(); i++) {
                group.add(input2.get(i));
                search(i + 1, input2, group, ret, counter + input2.get(i).length());
                group.remove(group.size() - 1);
            }
        }
    }

dictionary 에 있 는 단 어 를 반복 해서 사용 할 수 있다 면 search (i,...) 가 아니 라 search (i + 1,...)
Anyway, Good luck, Richardo! -- 09/27/2016

좋은 웹페이지 즐겨찾기