File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 1+ '''
2+ # 139. Word Break
3+
4+ use dynamic programming to check if the string is segmentable.
5+
6+ > **use dp to avoid redundant computations:**
7+ > backtracking approach will check all possible combinations of words recursively, which has time complexity of O(2^n))
8+
9+ ## Time and Space Complexity
10+
11+ ```
12+ TC: O(n^2)
13+ SC: O(n)
14+ ```
15+
16+ #### TC is O(n^2):
17+ - nested loops for checking if the string is segmentable. = O(n^2)
18+ - outer loop: iterate each char index from the start to the end. = O(n)
19+ - inner loop: for each index in the outer loop, checks substrings within the range of valid words in wordDict. = worst case, O(n)
20+
21+ #### SC is O(n):
22+ - using a dp array to store whether index i is segmentable. = O(n)
23+ '''
24+ class Solution :
25+ def wordBreak (self , s : str , wordDict : List [str ]) -> bool :
26+ word_set = set (wordDict )
27+ n = len (s )
28+
29+ segment_dp = [False ] * (n + 1 ) # SC: O(n)
30+ segment_dp [0 ] = True # Base case: an empty string is segmentable
31+
32+ for end in range (1 , n + 1 ): # TC: O(n^2)
33+ for start in range (end ):
34+ if segment_dp [start ] and s [start :end ] in word_set :
35+ segment_dp [end ] = True
36+ break
37+
38+ return segment_dp [n ]
You can’t perform that action at this time.
0 commit comments