--- a
+++ b/openomics_web/utils/str_utils.py
@@ -0,0 +1,43 @@
+COUNT = "_count"
+
+
+def make_trie(words):
+    """
+    Args:
+        words:
+    """
+    root = {}
+    for word in words:
+        current_dict = root
+        for letter in word:
+            current_dict = current_dict.setdefault(letter, {})
+
+        if COUNT not in current_dict:
+            current_dict[COUNT] = 1
+        else:
+            current_dict[COUNT] += 1
+    return root
+
+
+def longest_common_prefix(strs):
+    """
+    Args:
+        strs:
+    """
+    def traverse_trie(dictionary, prefix):
+        if len(prefix) > 100:
+            return prefix
+
+        if len(dictionary.keys()) == 1 and COUNT not in dictionary.keys():
+            letter = list(dictionary.keys())[0]
+            return traverse_trie(dictionary[letter], prefix + letter)
+        else:
+            return prefix
+
+    trie = make_trie(strs)
+    lcp_branches = []
+    for branch in trie:
+        branch_lcp = traverse_trie(trie[branch], branch)
+        lcp_branches.append(branch_lcp)
+
+    return lcp_branches