leetcode139 Word Break

 1 """
 2 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.
 3 Note:
 4     The same word in the dictionary may be reused multiple times in the segmentation.
 5     You may assume the dictionary does not contain duplicate words.
 6 Example 1:
 7 Input: s = "leetcode", wordDict = ["leet", "code"]
 8 Output: true
 9 Explanation: Return true because "leetcode" can be segmented as "leet code".
10 Example 2:
11 Input: s = "applepenapple", wordDict = ["apple", "pen"]
12 Output: true
13 Explanation: Return true because "applepenapple" can be segmented as "apple pen apple".
14              Note that you are allowed to reuse a dictionary word.
15 Example 3:
16 Input: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
17 Output: false
18 """
19 """
20 动态规划:类似于322题:https://www.cnblogs.com/yawenw/p/12298704.html
21 方程为dp[i] = { True if dp[:i] in dict 或者 dp[j] if dp[j:i] in dict }
22 传送门:https://blog.csdn.net/daniel_hh/article/details/89575491
23 """
24 class Solution:
25     def wordBreak(self, s, wordDict):
26         dp = [False] * (len(s) + 1)
27         dp[0] = True
28         if s in wordDict:
29             return True
30         for i in range(1, len(s) + 1):  # 从第一个到最后一个字符
31             for j in range(i):  # i之前的第一个到i个字符
32                 #切片的用法
33                 #nums = [2, 5, 8, 4]  print(nums[0:3]) == [2, 5, 8]
34                 #string = "abcdefg"   print(string[5:110]) == 'fg'
35                 if dp[j] and s[j:i] in wordDict:  # !!!动态方程
36                     dp[i] = True
37                     break #break 可有可无
38         return dp[len(s)]
原文地址:https://www.cnblogs.com/yawenw/p/12319243.html