Skip to content

Conversation

@BrianLusina
Copy link
Owner

@BrianLusina BrianLusina commented Dec 17, 2025

Describe your change:

Implements dynamic programming techniques using memoization and tabulation as well as backtracking and using a trie to solve the word break algorithm challenge.

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation.
  • If this pull request resolves one or more open issues then the commit message contains Fixes: #{$ISSUE_NO}.

Summary by CodeRabbit

  • New Features

    • Added multiple Word Break implementations and a new Alphabet Trie data structure (with node type).
  • Documentation

    • Added comprehensive Word Break guide and Alphabet Trie docs.
  • Tests

    • Added test coverage for all Word Break implementations; minor test formatting cleanup elsewhere.
  • Navigation

    • Restructured navigation: expanded Intervals and Trie sections; moved/removed several previous entries (Gas Stations, Majority Element, Merge/Meeting Rooms reorganized).

✏️ Tip: You can customize this high-level summary in your review settings.

@BrianLusina BrianLusina self-assigned this Dec 17, 2025
@BrianLusina BrianLusina added enhancement Algorithm Algorithm Problem Datastructures Datastructures Documentation Documentation Updates Backtracking Backtracking Algorithm Dynamic Programming Dynamic Programming algorithm Trees Trie labels Dec 17, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 17, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Adds a Word Break feature with five solution implementations and tests, introduces an AlphabetTrie and AlphabetTrieNode (with exports), and updates DIRECTORY.md to rearrange several algorithm/navigation entries; includes a minor test formatting change.

Changes

Cohort / File(s) Summary
Directory Restructuring
DIRECTORY.md
Updated navigation: removed some Arrays/Puzzles entries and certain test listings; added Word Break under Dynamic Programming; added interval problems (Insert Interval, Meeting Rooms, Merge Intervals); moved/added Greedy items (Gas Stations, Majority Element); expanded Trie references.
Word Break feature
algorithms/dynamic_programming/word_break/README.md, algorithms/dynamic_programming/word_break/__init__.py, algorithms/dynamic_programming/word_break/test_word_break.py
New README describing multiple approaches; added five implementations (word_break_trie, word_break_dp_tabulation, word_break_dp_tabulation_2, word_break_dp_memoization, word_break_backtrack) with type hints and docstrings; added parameterized tests covering implementations and cases.
Alphabet Trie implementation
datastructures/trees/trie/alphabet_trie/README.md, datastructures/trees/trie/alphabet_trie/__init__.py, datastructures/trees/trie/alphabet_trie/alphabet_trie.py, datastructures/trees/trie/alphabet_trie/alphabet_trie_node.py
Added AlphabetTrieNode (fixed 26-child array, is_end_of_word) and AlphabetTrie with insert(word: str) validation and insertion logic; package init and README added to expose new types.
Trie module exports
datastructures/trees/trie/__init__.py
Export list extended to include AlphabetTrie and AlphabetTrieNode.
Test formatting only
algorithms/greedy/gas_stations/test_gas_stations.py
Reformatted parameterized.expand arguments to multi-line; no behavioral changes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Inspect word break implementations for correctness of indexing, memoization keys, and consistent sentence reconstruction across variants (__init__.py in word_break).
  • Validate AlphabetTrie character validation, index calculation, and child allocation (alphabet_trie.py, alphabet_trie_node.py).
  • Confirm exports and all updates are correct and do not introduce circular imports (datastructures/trees/trie/__init__.py, alphabet_trie __init__.py).
  • Review tests for determinism and adequacy of coverage (test_word_break.py).

Possibly related PRs

Suggested labels

Strings

Poem

🐰 I hopped through tries both new and old,
I stitched up words from fragments bold.
With DP trails and alphabet trees bright,
I found all sentences by moonlit night.
Code hops onward — nimble, light!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 37.50% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: implementing word break algorithm solutions using dynamic programming approaches.
Description check ✅ Passed The description explains the implementation approach, marks relevant checklist items, and provides necessary details about the algorithm implementations included.

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7c0698a and f84ebac.

📒 Files selected for processing (4)
  • algorithms/dynamic_programming/word_break/README.md (1 hunks)
  • algorithms/dynamic_programming/word_break/__init__.py (1 hunks)
  • algorithms/dynamic_programming/word_break/test_word_break.py (1 hunks)
  • datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (5)
algorithms/dynamic_programming/word_break/__init__.py (3)

86-89: List aliasing issue with [[]] * n pattern.

Using [[]] * (len(s) + 1) creates a list where all elements initially reference the same empty list object. While the current code works because dp[i] = temp reassigns each position, this pattern is error-prone and could cause subtle bugs if the code is modified later.

Apply this diff to use a list comprehension for independent lists:

     # Initializing the dp table of size s.length + 1
-    dp = [[]] * (len(s) + 1)
+    dp: List[List[str]] = [[] for _ in range(len(s) + 1)]
     # Setting the base case
     dp[0] = [""]

104-108: Consider using a set for O(1) lookup.

The suffix in word_dict check on a list has O(m) complexity where m is the dictionary size. Converting word_dict to a set would improve this to O(1) average case.

+    word_set = set(word_dict)
+
     # For each substring in the input string, repeat the process.
     for i in range(1, len(s) + 1):
         prefix = s[:i]
         ...
-            if suffix in word_dict:
+            if suffix in word_set:

145-146: Consider using a set for O(1) lookup in word_break_dp_2 as well.

Similar to word_break_dp, the dictionary lookup could benefit from set conversion.

datastructures/trees/trie/alphabet_trie/alphabet_trie.py (2)

4-15: Add docstrings for the class and methods.

The AlphabetTrie class and its insert method lack docstrings. Adding comprehensive docstrings would improve code maintainability and help users understand the purpose, parameters, and behavior of the trie.

Apply this diff to add docstrings:

 class AlphabetTrie:
+    """
+    A trie data structure for storing English words (a-z).
+    
+    Uses a fixed 26-child array per node for efficient storage
+    and retrieval of lowercase English words.
+    """
     def __init__(self):
         self.root = AlphabetTrieNode()

     def insert(self, word: str) -> None:
+        """
+        Insert a word into the trie.
+        
+        Args:
+            word: The word to insert (must contain only English letters a-z).
+        
+        Raises:
+            ValueError: If word contains non-English letters.
+        """
         node = self.root
         for char in word:
             index = ord(char.lower()) - ord("a")
             if not node.children[index]:
                 node.children[index] = AlphabetTrieNode()
             node = node.children[index]
         node.is_end_of_word = True

4-15: Consider adding a search method for completeness.

The AlphabetTrie currently only supports insertion. Adding a search or contains method would make the trie more useful for typical trie operations like word lookup and prefix checking.

Would you like me to generate the implementation for search and starts_with methods?

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8505cf2 and 2b2681a.

⛔ Files ignored due to path filters (13)
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_1.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_10.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_11.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_12.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_13.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_2.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_3.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_4.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_5.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_6.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_7.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_8.png is excluded by !**/*.png
  • algorithms/dynamic_programming/word_break/images/solution/word_break_dynamic_programming_tabulation_solution_9.png is excluded by !**/*.png
📒 Files selected for processing (10)
  • DIRECTORY.md (3 hunks)
  • algorithms/dynamic_programming/word_break/README.md (1 hunks)
  • algorithms/dynamic_programming/word_break/__init__.py (1 hunks)
  • algorithms/dynamic_programming/word_break/test_word_break.py (1 hunks)
  • algorithms/greedy/gas_stations/test_gas_stations.py (1 hunks)
  • datastructures/trees/trie/__init__.py (1 hunks)
  • datastructures/trees/trie/alphabet_trie/README.md (1 hunks)
  • datastructures/trees/trie/alphabet_trie/__init__.py (1 hunks)
  • datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1 hunks)
  • datastructures/trees/trie/alphabet_trie/alphabet_trie_node.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (5)
algorithms/greedy/gas_stations/test_gas_stations.py (1)
algorithms/greedy/gas_stations/__init__.py (1)
  • can_complete_circuit (4-31)
algorithms/dynamic_programming/word_break/__init__.py (1)
datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1)
  • AlphabetTrie (4-15)
datastructures/trees/trie/__init__.py (2)
datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1)
  • AlphabetTrie (4-15)
datastructures/trees/trie/alphabet_trie/alphabet_trie_node.py (1)
  • AlphabetTrieNode (4-7)
datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1)
datastructures/trees/trie/alphabet_trie/alphabet_trie_node.py (1)
  • AlphabetTrieNode (4-7)
datastructures/trees/trie/alphabet_trie/__init__.py (2)
datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1)
  • AlphabetTrie (4-15)
datastructures/trees/trie/alphabet_trie/alphabet_trie_node.py (1)
  • AlphabetTrieNode (4-7)
🪛 LanguageTool
algorithms/dynamic_programming/word_break/README.md

[style] ~39-~39: ‘whether or not’ might be wordy. Consider a shorter alternative.
Context: ... every word of the dictionary and check whether or not the string starts with the current ...

(EN_WORDINESS_PREMIUM_WHETHER_OR_NOT)


[style] ~124-~124: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the dp table equal to the temp array. - We repeat the steps above for all prefixes...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🪛 markdownlint-cli2 (0.18.1)
DIRECTORY.md

71-71: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


72-72: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


86-86: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


87-87: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


88-88: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


89-89: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


90-90: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


91-91: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


92-92: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


93-93: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


94-94: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


95-95: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


96-96: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


97-97: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


98-98: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


99-99: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


100-100: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


101-101: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


343-343: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


344-344: Unordered list indentation
Expected: 6; Actual: 8

(MD007, ul-indent)


345-345: Unordered list indentation
Expected: 6; Actual: 8

(MD007, ul-indent)

🔇 Additional comments (14)
algorithms/greedy/gas_stations/test_gas_stations.py (1)

8-14: LGTM!

The reformatting of the @parameterized.expand decorator to a multi-line structure improves readability while preserving the same test cases and functionality.

DIRECTORY.md (4)

71-72: LGTM!

The Word Break entry is correctly added under Dynamic Programming, aligning with the new implementation.


86-89: LGTM!

Gas Stations and Majority Element entries are appropriately placed under the Greedy section.


96-101: LGTM!

Interval-related entries (Insert Interval, Meeting Rooms, Merge Intervals) are properly organized under the Intervals section.


343-345: LGTM!

Alphabet Trie documentation entries are correctly added, matching the new trie implementation files.

algorithms/dynamic_programming/word_break/__init__.py (2)

5-66: Well-structured trie-based implementation.

The reverse DP approach with trie traversal is correctly implemented. The algorithm properly builds sentences by combining current words with previously computed suffixes.


115-160: Clean implementation of reverse DP.

This function mirrors the trie-based approach but uses direct dictionary lookups, providing a good alternative when trie overhead isn't needed.

datastructures/trees/trie/alphabet_trie/README.md (1)

1-3: LGTM!

Basic documentation is in place. Consider expanding with usage examples in a future update.

datastructures/trees/trie/alphabet_trie/alphabet_trie_node.py (1)

4-7: LGTM!

Clean implementation of the trie node with proper type annotations. The fixed-size children array of 26 elements correctly maps to lowercase alphabet characters.

algorithms/dynamic_programming/word_break/README.md (2)

61-141: Excellent documentation of the DP approach!

The explanation of the dynamic programming tabulation approach is comprehensive, well-structured, and includes helpful step-by-step breakdowns. The optimal substructure and overlapping subproblems properties are clearly explained with concrete examples.


142-154: All referenced image files exist in images/solution/. No action required.

datastructures/trees/trie/alphabet_trie/__init__.py (1)

1-7: LGTM!

The package initialization correctly exports AlphabetTrie and AlphabetTrieNode, following Python packaging conventions.

datastructures/trees/trie/__init__.py (1)

5-6: LGTM!

The additions correctly export AlphabetTrie and AlphabetTrieNode from the trie package, maintaining consistency with the existing export pattern.

Also applies to: 13-14

algorithms/dynamic_programming/word_break/test_word_break.py (1)

1-4: Verify the test execution and coverage.

The test file is well-structured with comprehensive test cases covering various scenarios (overlapping dictionary entries, multiple valid segmentations, and unsplittable strings). Please ensure that all three implementations (word_break_trie, word_break_dp, and word_break_dp_2) are correctly imported and that the tests pass successfully.

@github-actions
Copy link

github-actions bot commented Dec 17, 2025

Warnings
⚠️ ❗ Big PR

: Pull Request size seems relatively large. If Pull Request contains multiple changes, split each into separate PR will helps faster, easier review.

Generated by 🚫 dangerJS against f84ebac

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (2)
algorithms/dynamic_programming/word_break/__init__.py (1)

39-41: Case sensitivity mismatch remains unaddressed.

This issue was previously identified: the code doesn't lowercase char before computing the index, while AlphabetTrie.insert() does. Uppercase characters will produce incorrect (potentially negative or out-of-bounds) indices.

Apply this diff:

         for end_idx in range(start_idx, len(s)):
             char = s[end_idx]
-            index = ord(char) - ord("a")
+            index = ord(char.lower()) - ord("a")
algorithms/dynamic_programming/word_break/README.md (1)

138-138: Formatting issue remains unaddressed.

This was previously identified: "thanq" should be "than q" (add space before backtick).

Apply this diff:

-  least one character shorter than`q`. Therefore, this problem obeys the optimal substructure property.
+  least one character shorter than `q`. Therefore, this problem obeys the optimal substructure property.
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2b2681a and 09786c0.

⛔ Files ignored due to path filters (1)
  • algorithms/dynamic_programming/word_break/images/solution/word_break_backtracking_solution_1.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • algorithms/dynamic_programming/word_break/README.md (1 hunks)
  • algorithms/dynamic_programming/word_break/__init__.py (1 hunks)
  • algorithms/dynamic_programming/word_break/test_word_break.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • algorithms/dynamic_programming/word_break/test_word_break.py
🧰 Additional context used
🧬 Code graph analysis (1)
algorithms/dynamic_programming/word_break/__init__.py (1)
datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1)
  • AlphabetTrie (4-15)
🪛 LanguageTool
algorithms/dynamic_programming/word_break/README.md

[style] ~45-~45: ‘whether or not’ might be wordy. Consider a shorter alternative.
Context: ... every word of the dictionary and check whether or not the string starts with the current ...

(EN_WORDINESS_PREMIUM_WHETHER_OR_NOT)


[style] ~192-~192: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the dp table equal to the temp array. - We repeat the steps above for all prefixes...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (3)
algorithms/dynamic_programming/word_break/__init__.py (1)

115-160: LGTM!

The dictionary-based DP approach is clean and avoids the shallow copy issues present in word_break_dp. The backwards iteration and sentence construction logic are correct.

algorithms/dynamic_programming/word_break/README.md (2)

1-26: LGTM!

The problem statement, constraints, and topics are clearly presented and comprehensive.


27-233: Comprehensive documentation with multiple approaches.

The documentation effectively covers naive, backtracking, and dynamic programming approaches with detailed explanations and complexity analyses. The step-by-step algorithm descriptions and solution summaries are particularly helpful.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
algorithms/dynamic_programming/word_break/__init__.py (3)

39-41: Case sensitivity issue already flagged in previous review.

The past review correctly identified that line 40 doesn't lowercase the character before calculating the index, which is inconsistent with AlphabetTrie.insert(). While the problem constraints guarantee lowercase input, this should still be fixed for robustness.


87-87: Shallow copy issue already flagged in previous review.

The past review correctly identified the shallow copy pattern. While the current code avoids bugs by reassigning each element, this pattern is fragile and should be replaced with a list comprehension for safety.


235-256: Parameter encapsulation issue already flagged in previous review.

The past review correctly identified that the backtrack function declares a sentence parameter but references the outer scope variable s on line 249. This breaks encapsulation and should be fixed by using the sentence parameter for the substring operation.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 09786c0 and 7c0698a.

📒 Files selected for processing (3)
  • algorithms/dynamic_programming/word_break/README.md (1 hunks)
  • algorithms/dynamic_programming/word_break/__init__.py (1 hunks)
  • algorithms/dynamic_programming/word_break/test_word_break.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • algorithms/dynamic_programming/word_break/test_word_break.py
🧰 Additional context used
🧬 Code graph analysis (1)
algorithms/dynamic_programming/word_break/__init__.py (1)
datastructures/trees/trie/alphabet_trie/alphabet_trie.py (1)
  • AlphabetTrie (4-15)
🪛 LanguageTool
algorithms/dynamic_programming/word_break/README.md

[style] ~45-~45: ‘whether or not’ might be wordy. Consider a shorter alternative.
Context: ... every word of the dictionary and check whether or not the string starts with the current ...

(EN_WORDINESS_PREMIUM_WHETHER_OR_NOT)


[style] ~192-~192: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...the dp table equal to the temp array. - We repeat the steps above for all prefixes...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~391-~391: Ensure spelling is correct
Context: ...t = ["a", "aa", "aaa", "aaaa", "aaaaa", "aaaaa"]. Every possible partition is a valid ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (2)
algorithms/dynamic_programming/word_break/__init__.py (2)

115-160: LGTM!

This implementation uses a dictionary-based DP approach that avoids the shallow copy issue present in word_break_dp_tabulation. The logic correctly iterates backwards, validates substrings, and accumulates sentences.


163-216: LGTM!

The memoization approach correctly caches results by substring to avoid recomputation. The logic handles the base case and recursive construction properly. Line 209's f-string expression is complex but functions correctly.

@BrianLusina BrianLusina merged commit ce15ab0 into main Dec 17, 2025
4 of 7 checks passed
@BrianLusina BrianLusina deleted the feat/strings-word-break branch December 17, 2025 07:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Algorithm Algorithm Problem Backtracking Backtracking Algorithm Datastructures Datastructures Documentation Documentation Updates Dynamic Programming Dynamic Programming algorithm enhancement Trees Trie

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants