Editorial for Facebook Hacker Cup '15 Round 2 P3 - Autocomplete Strikes Back
Submitting an official solution before solving the problem yourself is a bannable offence.
This problem can be approached in a few different ways, but the intended algorithm consists of inserting all  words into a trie (while marking which nodes in the trie represent the end of a word), and then breaking the problem down into subproblems with dynamic programming. Let 
 be the minimum number of letters to type in order to text 
 different words which end at nodes in node 
's subtree (or rather, subtrie). We can compute 
 by recursively traversing the trie, with the final answer being 
.
Let's establish that  depth of node 
. Note that 
 is then also the length of the prefix (and possibly complete word) represented by node 
.
To establish some simple base cases,  for any node 
, and 
 for any node 
 besides the root. This is because, if only 
 word will be used from node 
's subtree, then the prefix represented by node 
 won't be a prefix of any other chosen word, meaning that it can be used to type this word.
For any internal node  and any positive 
, we can compute 
 by considering various distributions of 
 words amongst node 
 and its children's subtries. Consider that node 
 has children 
, and we use 
 words from each of those children's subtries respectively. If node 
 represents the end of one of the 
 given words, then 
, with 
. Otherwise, 
 with 
. Either way, we can consider all of the possible combinations of 
 with a classic instance of dynamic programming across the children. In this fashion, we can in fact compute the values 
 all at once in 
 time.
Every node is the child of at most one other node, meaning that the overall time complexity of this algorithm is , where 
 is the number of nodes in the trie (which is at most the sum of the lengths of the words).
Comments