Advertisement
Guest User

Untitled

a guest
Aug 29th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. import collections
  2. class TrieNode(object):
  3. def __init__(self, letter=None):
  4. self.letter = letter
  5. self.freq = 1
  6. self.suffixes = collections.OrderedDict()
  7.  
  8. def add(self, word):
  9. node = self
  10. for letter in word:
  11. if not letter in node.suffixes:
  12. node.suffixes[letter] = TrieNode(letter)
  13. else:
  14. node.suffixes[letter].freq += 1
  15. node = node.suffixes[letter]
  16.  
  17. def __str__(self):
  18. s = str(self.letter) + ':' + str(self.freq) + '{'
  19. for v in self.suffixes.values():
  20. s += str(v)
  21. s += '}'
  22. return s
  23.  
  24. class Solution:
  25. # @param A : list of strings
  26. # @return a list of strings
  27. def prefix(self, A):
  28. trie = TrieNode()
  29. for word in A:
  30. trie.add(word)
  31. print(trie)
  32. res = []
  33. def dfs(node, path=None):
  34. if not path:
  35. path = []
  36. if node:
  37. if node.letter and len(node.suffixes) < 2 and node.freq == 1:
  38. res.append(''.join(path[1:]+[node.letter]))
  39. else:
  40. for suffix in node.suffixes:
  41. dfs(node.suffixes[suffix], path+[node.letter])
  42. dfs(trie)
  43. return res
  44.  
  45. if __name__ == '__main__':
  46. s = Solution()
  47. print(s.prefix(['abde', 'abc', 'bc']))
  48. print(s.prefix(['zebra', 'dog', 'duck', 'dove']))
  49. print(s.prefix([ "bearcat", "bert" ]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement