"Causes" Puzzle solution (network of words with Levenshtein distance 1)
Here is one idea: You could first put the words into a hashmap, the length of them being the key. O(n)

Then, since you are only interested in "causes", grab that word and make a node and remove it from the hashmap. 

Then, a recursive function


adds all friends to the node that are in the hashmap (only looking at the relevant lengths)
removes those from the hashmap
calls itself on those new nodes


The end result is the social graph of "causes".

It really depends what you are interested in in improving though: For instance, one could assume the whole thing is only called once for a fixed string, or it could be called many many times for different inputs. Depending on that, one might precompute more.