From a28d87dcaafd9bdf9305114a2a102f3cd480735f Mon Sep 17 00:00:00 2001 From: Lusina <12752833+BrianLusina@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:22:22 +0300 Subject: [PATCH 1/4] feat(strings, trie): is prefix of word This adds a function `is_prefix_of_word` that enables searching for the index of a `search_word` in a given sentence and return the index if it exists. The index is 1-based. This modifies the `TrieNode` allowing callers to use the `TrieNode` to build a trie from the node and perform prefix searches a well as modifies the `Trie` class as well adding modifications and optimizations that match the changes in the `TrieNode` class. Also note that this change includes an `index` to the `TrieNode` to track the earliest index of a given character in a sentence. That is, what is the earliest that a word has been seen, This allows returning multiple words in the case of using the `Trie` `search` functionality. --- .../fast_and_slow/happy_number/README.md | 28 ++++----- .../{ => images/example}/example_1_1.png | Bin .../{ => images/example}/example_1_2.png | Bin .../{ => images/example}/example_1_3.png | Bin .../{ => images/example}/example_2_1.png | Bin .../{ => images/example}/example_2_2.png | Bin .../{ => images/example}/example_2_3.png | Bin .../solution}/solution_example_1.png | Bin .../solution}/solution_example_2.png | Bin .../solution}/solution_example_3.png | Bin .../solution}/solution_example_4.png | Bin .../solution}/solution_example_5.png | Bin .../solution}/solution_example_6.png | Bin .../solution}/solution_example_7.png | Bin .../solution}/solution_example_8.png | Bin .../happy_number/test_happy_number.py | 6 ++ .../streams/stream_checker/__init__.py | 2 +- datastructures/trees/trie/trie.py | 56 +++++++++++++---- datastructures/trees/trie/trie_node.py | 43 ++++++++++++- pystrings/is_prefix/README.md | 24 ++++++++ pystrings/is_prefix/__init__.py | 23 +++++++ .../images/examples/is_prefix_example_1.png | Bin 0 -> 26094 bytes .../images/examples/is_prefix_example_2.png | Bin 0 -> 25286 bytes .../images/examples/is_prefix_example_3.png | Bin 0 -> 30854 bytes .../images/examples/is_prefix_example_4.png | Bin 0 -> 30358 bytes pystrings/is_prefix/test_is_prefix_of_word.py | 57 ++++++++++++++++++ tests/datastructures/trees/trie/test_trie.py | 10 +++ 27 files changed, 220 insertions(+), 29 deletions(-) rename algorithms/fast_and_slow/happy_number/{ => images/example}/example_1_1.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/example}/example_1_2.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/example}/example_1_3.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/example}/example_2_1.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/example}/example_2_2.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/example}/example_2_3.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_1.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_2.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_3.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_4.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_5.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_6.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_7.png (100%) rename algorithms/fast_and_slow/happy_number/{ => images/solution}/solution_example_8.png (100%) create mode 100644 pystrings/is_prefix/README.md create mode 100644 pystrings/is_prefix/__init__.py create mode 100644 pystrings/is_prefix/images/examples/is_prefix_example_1.png create mode 100644 pystrings/is_prefix/images/examples/is_prefix_example_2.png create mode 100644 pystrings/is_prefix/images/examples/is_prefix_example_3.png create mode 100644 pystrings/is_prefix/images/examples/is_prefix_example_4.png create mode 100644 pystrings/is_prefix/test_is_prefix_of_word.py diff --git a/algorithms/fast_and_slow/happy_number/README.md b/algorithms/fast_and_slow/happy_number/README.md index a38bfa88..3887f547 100644 --- a/algorithms/fast_and_slow/happy_number/README.md +++ b/algorithms/fast_and_slow/happy_number/README.md @@ -15,26 +15,26 @@ Return TRUE if n is a happy number, and FALSE if not. ### Sample Example 1 -![Sample Example 1.1](example_1_1.png) -![Sample Example 1.2](example_1_2.png) -![Sample Example 1.3](example_1_3.png) +![Sample Example 1.1](images/example/example_1_1.png) +![Sample Example 1.2](images/example/example_1_2.png) +![Sample Example 1.3](images/example/example_1_3.png) ### Sample Example 2 -![Sample Example 2.1](example_2_1.png) -![Sample Example 2.2](example_2_2.png) -![Sample Example 2.3](example_2_3.png) +![Sample Example 2.1](images/example/example_2_1.png) +![Sample Example 2.2](images/example/example_2_2.png) +![Sample Example 2.3](images/example/example_2_3.png) ## Solution Example Below shows an example using Floyd's Cycle Detection Algorithm or Tortoise and Hare algorithm to detect a cycle for the number 2. -![Solution Example 1](solution_example_1.png) -![Solution Example 2](solution_example_2.png) -![Solution Example 3](solution_example_3.png) -![Solution Example 4](solution_example_4.png) -![Solution Example 5](solution_example_5.png) -![Solution Example 6](solution_example_6.png) -![Solution Example 7](solution_example_7.png) -![Solution Example 8](solution_example_8.png) +![Solution Example 1](images/solution/solution_example_1.png) +![Solution Example 2](images/solution/solution_example_2.png) +![Solution Example 3](images/solution/solution_example_3.png) +![Solution Example 4](images/solution/solution_example_4.png) +![Solution Example 5](images/solution/solution_example_5.png) +![Solution Example 6](images/solution/solution_example_6.png) +![Solution Example 7](images/solution/solution_example_7.png) +![Solution Example 8](images/solution/solution_example_8.png) diff --git a/algorithms/fast_and_slow/happy_number/example_1_1.png b/algorithms/fast_and_slow/happy_number/images/example/example_1_1.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/example_1_1.png rename to algorithms/fast_and_slow/happy_number/images/example/example_1_1.png diff --git a/algorithms/fast_and_slow/happy_number/example_1_2.png b/algorithms/fast_and_slow/happy_number/images/example/example_1_2.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/example_1_2.png rename to algorithms/fast_and_slow/happy_number/images/example/example_1_2.png diff --git a/algorithms/fast_and_slow/happy_number/example_1_3.png b/algorithms/fast_and_slow/happy_number/images/example/example_1_3.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/example_1_3.png rename to algorithms/fast_and_slow/happy_number/images/example/example_1_3.png diff --git a/algorithms/fast_and_slow/happy_number/example_2_1.png b/algorithms/fast_and_slow/happy_number/images/example/example_2_1.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/example_2_1.png rename to algorithms/fast_and_slow/happy_number/images/example/example_2_1.png diff --git a/algorithms/fast_and_slow/happy_number/example_2_2.png b/algorithms/fast_and_slow/happy_number/images/example/example_2_2.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/example_2_2.png rename to algorithms/fast_and_slow/happy_number/images/example/example_2_2.png diff --git a/algorithms/fast_and_slow/happy_number/example_2_3.png b/algorithms/fast_and_slow/happy_number/images/example/example_2_3.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/example_2_3.png rename to algorithms/fast_and_slow/happy_number/images/example/example_2_3.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_1.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_1.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_1.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_1.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_2.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_2.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_2.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_2.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_3.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_3.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_3.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_3.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_4.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_4.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_4.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_4.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_5.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_5.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_5.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_5.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_6.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_6.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_6.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_6.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_7.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_7.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_7.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_7.png diff --git a/algorithms/fast_and_slow/happy_number/solution_example_8.png b/algorithms/fast_and_slow/happy_number/images/solution/solution_example_8.png similarity index 100% rename from algorithms/fast_and_slow/happy_number/solution_example_8.png rename to algorithms/fast_and_slow/happy_number/images/solution/solution_example_8.png diff --git a/algorithms/fast_and_slow/happy_number/test_happy_number.py b/algorithms/fast_and_slow/happy_number/test_happy_number.py index 2cdc8bb6..3bde6423 100644 --- a/algorithms/fast_and_slow/happy_number/test_happy_number.py +++ b/algorithms/fast_and_slow/happy_number/test_happy_number.py @@ -113,6 +113,12 @@ def test_9(self): actual = is_happy_number_2(number) self.assertFalse(actual) + def test_10(self): + """should return false for 20""" + number = 20 + actual = is_happy_number_2(number) + self.assertFalse(actual) + if __name__ == "__main__": unittest.main() diff --git a/datastructures/streams/stream_checker/__init__.py b/datastructures/streams/stream_checker/__init__.py index 02d7d02f..78687c03 100644 --- a/datastructures/streams/stream_checker/__init__.py +++ b/datastructures/streams/stream_checker/__init__.py @@ -58,7 +58,7 @@ def query(self, letter: str) -> bool: # Iterate stream in reverse (newest character first) for character in reversed(self.stream): - # Check for dead end (critical for query logic) + # Check for dead-end (critical for query logic) if character not in current.children: return False diff --git a/datastructures/trees/trie/trie.py b/datastructures/trees/trie/trie.py index c1b0e2de..86379b59 100644 --- a/datastructures/trees/trie/trie.py +++ b/datastructures/trees/trie/trie.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from datastructures.trees.trie.trie_node import TrieNode @@ -6,25 +6,54 @@ class Trie: def __init__(self): self.root = TrieNode() - def insert(self, word: str) -> None: + def insert(self, word: str, index: Optional[int] = None) -> None: + """ + Inserts a word into the Trie. This has an optional index argument that allows + us to track the index of the word in the original list. So, if inserting words from a list such as "The author + is smart", the index of "smart" would be 3. If this is not provided, i.e. None, then each node in the tree will + have an index of None. Note that for each character in the word, we update the index of the node to the index of + the word. For example: + + sentence = "please playground player" + + Insert "please" (index 0): + p(0) → l(0) → e(0) → a(0) → s(0) → e(0) + + Insert "playground" (index 1): + p(0) → l(0) → a(1) → y(1) → g(1) → ... + ↘ + e(0) → a(0) → s(0) → e(0) + + Insert "player" (index 2): + p(0) → l(0) → a(1) → y(1) → ... + ↘ + e(2) → r(2) + + Index then tracks the earliest index of the word in the original list. So, for the example above, the index of + "player" would be 2, not 0. + + Parameters: + word (str): The word to insert + index (Optional[int]): The index of the word (default is None) + + Returns: + None + """ curr = self.root for char in word: - if char in curr.children: - curr = curr.children[char] - else: - new_node = TrieNode() - curr.children[char] = new_node - curr = new_node + curr = curr.children[char] + if index: + curr.index = min(curr.index or float("inf"), index) curr.is_end = True def search(self, word: str) -> List[str]: - curr = self.root - if len(word) == 0: return [] + curr = self.root + for char in word: if char in curr.children: curr = curr.children[char] @@ -35,10 +64,10 @@ def search(self, word: str) -> List[str]: def dfs(node: TrieNode, prefix: str) -> None: if node.is_end: - output.append((prefix + node.char)) + output.append((prefix + "".join(node.children.keys()))) for child in node.children.values(): - dfs(child, prefix + node.char) + dfs(child, prefix + "".join(node.children.keys())) dfs(curr, word[:-1]) return output @@ -55,3 +84,6 @@ def starts_with(self, prefix: str) -> bool: curr = curr.children[char] return True + + def __repr__(self): + return f"Trie(root={self.root})" diff --git a/datastructures/trees/trie/trie_node.py b/datastructures/trees/trie/trie_node.py index bcab413b..0b458a7f 100644 --- a/datastructures/trees/trie/trie_node.py +++ b/datastructures/trees/trie/trie_node.py @@ -1,4 +1,4 @@ -from typing import DefaultDict +from typing import DefaultDict, Optional from collections import defaultdict @@ -18,6 +18,45 @@ def __init__(self): """ self.children: DefaultDict[str, TrieNode] = defaultdict(TrieNode) self.is_end = False + self.index: Optional[int] = None def __repr__(self): - return f"TrieNode({self.children.items()}, {self.is_end})" + return f"TrieNode(children={self.children.items()}, index={self.index}, is_end={self.is_end})" + + def insert(self, word: str, index: int): + """ + Inserts a word into the TrieNode. + + Parameters: + word (str): The word to insert + index (int): The index of the word + + Returns: + None + """ + curr = self + for char in word: + curr = curr.children[char] + curr.index = min(curr.index or float("inf"), index) + curr.is_end = True + + def search_prefix(self, prefix: str) -> int: + """ + Searches for a prefix in the TrieNode. + + Parameters: + prefix (str): The prefix to search for + + Returns: + int: The index of the word if the prefix is found, -1 otherwise + """ + current = self + + for char in prefix: + if char not in current.children: + return -1 + + # Traverse to the next node + current = current.children[char] + + return current.index diff --git a/pystrings/is_prefix/README.md b/pystrings/is_prefix/README.md new file mode 100644 index 00000000..97c3efd0 --- /dev/null +++ b/pystrings/is_prefix/README.md @@ -0,0 +1,24 @@ +# Check if a Word is a Prefix of Any Word in a Sentence + +You are given a sentence containing words separated by single spaces and a searchWord. Your task is to determine whether +searchWord is a prefix of any word in the sentence. +Return the 1-based index of the first word in which searchWord appears as a prefix. + +- If searchWord is a prefix of multiple words, return the index of the earliest such word. +- If no word starts with searchWord, return −1 + +> A prefix of a string is any contiguous substring that begins at the first character. + +Constraints: + +- 1 <= sentence.length <= 100 +- 1 <= search_word.length <= 10 +- The sentence consists of lowercase English letters and spaces. +- search_word consists of lowercase English letters. + +## Examples + +![Example 1](./images/examples/is_prefix_example_1.png) +![Example 2](./images/examples/is_prefix_example_2.png) +![Example 3](./images/examples/is_prefix_example_3.png) +![Example 4](./images/examples/is_prefix_example_4.png) diff --git a/pystrings/is_prefix/__init__.py b/pystrings/is_prefix/__init__.py new file mode 100644 index 00000000..0932c70d --- /dev/null +++ b/pystrings/is_prefix/__init__.py @@ -0,0 +1,23 @@ +from datastructures.trees.trie.trie_node import TrieNode + + +def is_prefix_of_word(sentence: str, search_word: str) -> int: + """ + This function will check if a given search_word is a prefix of any word in a sentence. + + Parameters: + sentence (str): The sentence to search in. + search_word (str): The prefix to search for. + + Returns: + int: The index of the word if the prefix is found, -1 otherwise. + """ + trie = TrieNode() + word_list = sentence.split(" ") + + # Insert the words into the trie with their respective index + for index, word in enumerate(word_list, start=1): + trie.insert(word, index) + + # Search for the prefix in the trie + return trie.search_prefix(search_word) diff --git a/pystrings/is_prefix/images/examples/is_prefix_example_1.png b/pystrings/is_prefix/images/examples/is_prefix_example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2eaa7b6ce137fa0dd647215a4f5f34ded4829407 GIT binary patch literal 26094 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 av9z|4yIhZL@CX0+VW@AWSFLmJ`TqgRwiiAC literal 0 HcmV?d00001 diff --git a/pystrings/is_prefix/images/examples/is_prefix_example_2.png b/pystrings/is_prefix/images/examples/is_prefix_example_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a497d10cfc6270e82365aadc2e72388f2f3809 GIT binary patch literal 25286 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⪼c--H3`c?-XqTN&Gf95ODSH% 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 NeBR?+gF{%#{{RijaXtV5 literal 0 HcmV?d00001 diff --git a/pystrings/is_prefix/images/examples/is_prefix_example_3.png b/pystrings/is_prefix/images/examples/is_prefix_example_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3db0093268d7c91629bccfddae3ac8eb4d99e2 GIT binary patch literal 30854 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 Ny|1N&zGwOR{{b{1byxrZ literal 0 HcmV?d00001 diff --git a/pystrings/is_prefix/images/examples/is_prefix_example_4.png b/pystrings/is_prefix/images/examples/is_prefix_example_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3b04972b35ddb6a1386f18d6bd82a4c62d231975 GIT binary patch literal 30358 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 <(ViO5 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 Y^NP=>{ES>e=QopTJk)uBP< Date: Fri, 21 Nov 2025 10:26:08 +0300 Subject: [PATCH 2/4] chore: remove redundant test --- tests/datastructures/trees/trie/test_trie.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/datastructures/trees/trie/test_trie.py b/tests/datastructures/trees/trie/test_trie.py index 0c9bf393..35ac2cca 100644 --- a/tests/datastructures/trees/trie/test_trie.py +++ b/tests/datastructures/trees/trie/test_trie.py @@ -42,16 +42,6 @@ def test_trie_insert_and_search_words_prefixed_with_he(self): actual2 = trie.search("her") self.assertEqual(["her", "here"], actual2) - def test_trie_insert_and_search_words_prefixed_with_he(self): - """Test insert into trie with index on words""" - trie = Trie() - sentence= "here hear he hello how her" - words = sentence.split(" ") - for idx, word in enumerate(words): - trie.insert(word, idx) - - print(trie) - if __name__ == "__main__": unittest.main() From cbf17277a1734c80d8a29802fe9a8c4a447f192b Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Fri, 21 Nov 2025 07:26:25 +0000 Subject: [PATCH 3/4] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 528220a5..c79ace86 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -707,6 +707,8 @@ * [Test Greatest Common Divisor](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/greatest_common_divisor/test_greatest_common_divisor.py) * Inttostr * [Test Int To Str](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/inttostr/test_int_to_str.py) + * Is Prefix + * [Test Is Prefix Of Word](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/is_prefix/test_is_prefix_of_word.py) * Is Unique * [Test Is Unique](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/is_unique/test_is_unique.py) * Issubsequence From 316633941d269de8e0879821dee42d4625a80ec1 Mon Sep 17 00:00:00 2001 From: Lusina <12752833+BrianLusina@users.noreply.github.com> Date: Sat, 22 Nov 2025 11:51:47 +0300 Subject: [PATCH 4/4] refactor(trie): fix none check --- datastructures/trees/trie/trie.py | 2 +- datastructures/trees/trie/trie_node.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/datastructures/trees/trie/trie.py b/datastructures/trees/trie/trie.py index 86379b59..76982aa6 100644 --- a/datastructures/trees/trie/trie.py +++ b/datastructures/trees/trie/trie.py @@ -43,7 +43,7 @@ def insert(self, word: str, index: Optional[int] = None) -> None: for char in word: curr = curr.children[char] - if index: + if index is not None: curr.index = min(curr.index or float("inf"), index) curr.is_end = True diff --git a/datastructures/trees/trie/trie_node.py b/datastructures/trees/trie/trie_node.py index 0b458a7f..59d05731 100644 --- a/datastructures/trees/trie/trie_node.py +++ b/datastructures/trees/trie/trie_node.py @@ -59,4 +59,4 @@ def search_prefix(self, prefix: str) -> int: # Traverse to the next node current = current.children[char] - return current.index + return current.index if current.index is not None else -1