Skip to content

Problem

Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a space-separated sequence of one or more dictionary words.

Note that the same word in the dictionary may be reused multiple times in the segmentation.

Constraints:

  • 1 <= s.length <= 300
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 20
  • s and wordDict[i] consist of only lowercase English letters.
  • All the strings of wordDict are unique.

Example 1:

**Input:** s = "leetcode", wordDict = ["leet","code"]
**Output:** true
**Explanation:** Return true because "leetcode" can be segmented as "leet code".

Solve

A example of dynamic programming.

  • Using set() hash map for better string finding
  • Using evaluation: If s[1] can be create by provided word dict, s[2] is also a word => that mean s[1]+s[2] can be create by provided word dict. We can using this to form a dynamic programming approach
class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        wordDict = set(wordDict)
        dp = [False]*(len(s)+1)
        dp[0] = True
        for i in range(1, len(s)+1):
            for j in range(i):
                if dp[j] and (s[j:i] in wordDict):
                    dp[i] = True
        return dp[len(s)]

Last update : October 13, 2023
Created : August 16, 2023