단어 연결

설명



고유한 문자열 목록words이 주어지면 목록에 있는 다른 단어를 연결한 단어 수를 반환합니다. 여러 번 연결하고 연결할 때 단어를 재사용할 수 있습니다.

제약 조건:
  • n ≤ 100,000 여기서 nwords의 길이입니다.
  • m ≤ 100 여기서 mwords에서 문자열의 최대 길이입니다.

  • 예 1



    입력




    words = ["news", "paper", "newspaper", "binary", "search", "binarysearch"]
    


    산출




    2
    


    설명




    "newspaper" is concatenation of "news" and "paper". "binarysearch" is concatenation of "binary" and "search".
    



    예 2



    입력




    words = ["cc", "c"]
    


    산출




    1
    


    설명




    "cc" is a concatenation of "c" and "c".
    



    직관


  • 사전 생성
  • 이 사전에서 하위 문자열을 찾습니다.

  • 구현




    import java.util.*;
    
    class Solution {
        private final Set<String> DICTIONARY = new HashSet<>();
        public int solve(String[] words) {
            Collections.addAll(DICTIONARY, words);
            int ans = 0;
            for (String word : words) {
                if (isConcatenation(word, 0)) {
                    ans++;
                }
            }
            return ans;
        }
    
        private boolean isConcatenation(String wordStr, int wordCount) {
            int n = wordStr.length();
            if (n == 0) {
                return wordCount > 1;
            }
            for (int i = 1; i <= n; i++) {
                String prefix = wordStr.substring(0, i);
                if (DICTIONARY.contains(prefix)
                    && isConcatenation(wordStr.substring(i), wordCount + 1)) {
                    return true;
                }
            }
            return false;
        }
    }
    


    시간 복잡도


  • 시간: O(n^2)
  • 스페이스: O(n)
  • 좋은 웹페이지 즐겨찾기