From 276bb2bcdef52b8a9f092c427019bf4895d0113e Mon Sep 17 00:00:00 2001 From: "staging-devin-ai-integration[bot]" <166158716+staging-devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 21:50:09 +0000 Subject: [PATCH] Add new trie algorithm with insert and search functions --- tree/trie/new_trie.py | 37 +++++++++++++++++++++++++++++++++++++ tree/trie/test_new_trie.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 tree/trie/new_trie.py create mode 100644 tree/trie/test_new_trie.py diff --git a/tree/trie/new_trie.py b/tree/trie/new_trie.py new file mode 100644 index 0000000..19c7dcb --- /dev/null +++ b/tree/trie/new_trie.py @@ -0,0 +1,37 @@ +""" +Implement a new trie algorithm with insert and search functions. + +Note: +This implementation assumes all inputs consist of lowercase letters a-z. +""" + +class TrieNode: + def __init__(self): + self.children = {} + self.is_word = False + +class NewTrie: + def __init__(self): + self.root = TrieNode() + + def insert(self, word: str) -> None: + """ + Inserts a word into the trie. + """ + node = self.root + for char in word: + if char not in node.children: + node.children[char] = TrieNode() + node = node.children[char] + node.is_word = True + + def search(self, word: str) -> bool: + """ + Returns True if the word is in the trie, False otherwise. + """ + node = self.root + for char in word: + if char not in node.children: + return False + node = node.children[char] + return node.is_word diff --git a/tree/trie/test_new_trie.py b/tree/trie/test_new_trie.py new file mode 100644 index 0000000..a17efa0 --- /dev/null +++ b/tree/trie/test_new_trie.py @@ -0,0 +1,30 @@ +import unittest +from new_trie import NewTrie + +class TestNewTrie(unittest.TestCase): + def setUp(self): + self.trie = NewTrie() + + def test_insert_and_search(self): + self.trie.insert("apple") + self.assertTrue(self.trie.search("apple")) + self.assertFalse(self.trie.search("app")) + self.assertFalse(self.trie.search("apples")) + + def test_empty_string(self): + self.trie.insert("") + self.assertTrue(self.trie.search("")) + + def test_common_prefix(self): + self.trie.insert("cat") + self.trie.insert("car") + self.assertTrue(self.trie.search("cat")) + self.assertTrue(self.trie.search("car")) + self.assertFalse(self.trie.search("ca")) + + def test_non_existent_word(self): + self.trie.insert("hello") + self.assertFalse(self.trie.search("world")) + +if __name__ == "__main__": + unittest.main()