From 32cb62a004e3c92c79adb8fb3ac096b460f4075b Mon Sep 17 00:00:00 2001 From: Nishant Nirmal Date: Thu, 9 Apr 2020 21:17:45 +0530 Subject: [PATCH] Word Break --- 0139-Word-Break.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 0139-Word-Break.py diff --git a/0139-Word-Break.py b/0139-Word-Break.py new file mode 100644 index 0000000..c0caa79 --- /dev/null +++ b/0139-Word-Break.py @@ -0,0 +1,43 @@ +''' +Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words. + +Note: + +The same word in the dictionary may be reused multiple times in the segmentation. +You may assume the dictionary does not contain duplicate words. +Example 1: + +Input: s = "leetcode", wordDict = ["leet", "code"] +Output: true +Explanation: Return true because "leetcode" can be segmented as "leet code". +Example 2: + +Input: s = "applepenapple", wordDict = ["apple", "pen"] +Output: true +Explanation: Return true because "applepenapple" can be segmented as "apple pen apple". + Note that you are allowed to reuse a dictionary word. +Example 3: + +Input: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] +Output: false +''' + +# Method 1 +class Solution: + def wordBreak(self, s: str, wordDict: List[str]) -> bool: + ok = [True] + for i in range(1, len(s) + 1): + ok += any(ok[j] and s[j : i] in wordDict for j in range(i)), + return ok[-1] + +# Method 2 +class Solution: + def wordBreak(self, s: str, wordDict: List[str]) -> bool: + dp = [False] * (len(s) + 1) + dp[0] = True + for i in range(len(s)): + if dp[i]: + for j in range(i + 1, len(s) + 1): + if s[i : j] in wordDict: + dp[j] = True + return dp[-1]