139. Word Break Medium

来源:互联网 发布:淘宝网男士休闲布鞋 编辑:程序博客网 时间:2024/05/26 09:57

     
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. You may assume the dictionary does not contain duplicate words.

For example, given
s = "leetcode",
dict = ["leet", "code"].

Return true because "leetcode" can be segmented as "leet code".


思路:使用动态规划,子问题为从s[0]开始的更短的子列能否分割。用bool[i]来保存长度为i的子列是否可以分割。可以分割的条件是最后一个分割线画在子列的末端。我们先看第一次画分割线能不能直接画在子列的末端,若能,则bool保存true,若不能,则子列中能画分割线使得分割线左面和右面均在dict中的地方添加分割线,若最终能满足子列可以分割,保存true,否则该子列不能分割,保存false。这样就列出所有子列可以画分割线的地方,s的分割线必定出现在s的结尾以及s子列的分割线处。最终bool的最后一项就是我们需要的结果。


class Solution(object):    def wordBreak(self, s, wordDict):        """        :type s: str        :type wordDict: List[str]        :rtype: bool        """        bool = [False]        bool = bool * len(s)        i = 0        while i < len(s):            if s[0 : i + 1] in wordDict:                bool[i] = True            else:                j = 0                while j < i:                    if bool[j] and s[j + 1 : i + 1] in wordDict:                        bool[i] = True                                        j += 1                                i += 1                    return bool[len(s) - 1]


原创粉丝点击