mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 13:01:08 +00:00
Add Word Break algorithm (#11687)
* Add Word Break algorithm * Add Word Break algorithm * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
f4b4ac159a
commit
080e7903a0
71
backtracking/word_break.py
Normal file
71
backtracking/word_break.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
"""
|
||||
Word Break Problem is a well-known problem in computer science.
|
||||
Given a string and a dictionary of words, the task is to determine if
|
||||
the string can be segmented into a sequence of one or more dictionary words.
|
||||
|
||||
Wikipedia: https://en.wikipedia.org/wiki/Word_break_problem
|
||||
"""
|
||||
|
||||
|
||||
def backtrack(input_string: str, word_dict: set[str], start: int) -> bool:
|
||||
"""
|
||||
Helper function that uses backtracking to determine if a valid
|
||||
word segmentation is possible starting from index 'start'.
|
||||
|
||||
Parameters:
|
||||
input_string (str): The input string to be segmented.
|
||||
word_dict (set[str]): A set of valid dictionary words.
|
||||
start (int): The starting index of the substring to be checked.
|
||||
|
||||
Returns:
|
||||
bool: True if a valid segmentation is possible, otherwise False.
|
||||
|
||||
Example:
|
||||
>>> backtrack("leetcode", {"leet", "code"}, 0)
|
||||
True
|
||||
|
||||
>>> backtrack("applepenapple", {"apple", "pen"}, 0)
|
||||
True
|
||||
|
||||
>>> backtrack("catsandog", {"cats", "dog", "sand", "and", "cat"}, 0)
|
||||
False
|
||||
"""
|
||||
|
||||
# Base case: if the starting index has reached the end of the string
|
||||
if start == len(input_string):
|
||||
return True
|
||||
|
||||
# Try every possible substring from 'start' to 'end'
|
||||
for end in range(start + 1, len(input_string) + 1):
|
||||
if input_string[start:end] in word_dict and backtrack(
|
||||
input_string, word_dict, end
|
||||
):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def word_break(input_string: str, word_dict: set[str]) -> bool:
|
||||
"""
|
||||
Determines if the input string can be segmented into a sequence of
|
||||
valid dictionary words using backtracking.
|
||||
|
||||
Parameters:
|
||||
input_string (str): The input string to segment.
|
||||
word_dict (set[str]): The set of valid words.
|
||||
|
||||
Returns:
|
||||
bool: True if the string can be segmented into valid words, otherwise False.
|
||||
|
||||
Example:
|
||||
>>> word_break("leetcode", {"leet", "code"})
|
||||
True
|
||||
|
||||
>>> word_break("applepenapple", {"apple", "pen"})
|
||||
True
|
||||
|
||||
>>> word_break("catsandog", {"cats", "dog", "sand", "and", "cat"})
|
||||
False
|
||||
"""
|
||||
|
||||
return backtrack(input_string, word_dict, 0)
|
Loading…
Reference in New Issue
Block a user