当前位置: 代码迷 >> 综合 >> 139. Word Break 时间复杂度(O(n*m))
  详细解决方案

139. Word Break 时间复杂度(O(n*m))

热度:73   发布时间:2024-02-22 09:23:13.0

 时间复杂度(O(n*m))

思想:动态规划

class Solution:def wordBreak(self, s: str, wordDict: [str]) -> bool:if len(s) == 0: return Trueif len(wordDict) == 0: return Falsewords = set(wordDict)max_len_word = max([len(w) for w in words])res = [False] * len(s)for i in range(len(s)):if i > 0 and res[i - 1] != True: continuefor j in range(i + 1, min(len(s) + 1, i + max_len_word + 1)):if s[i: j] in words:res[j - 1] = Truereturn res[-1]

思想:前缀字典+动态规划(理论上,当数据量比较大的时候,效率更好)

class Solution:def wordBreak(self, s: str, wordDict: [str]) -> bool:if len(s) == 0: return Truepre_words = {}for word in wordDict:#构建前缀字典if word not in pre_words:   pre_words[word] = [0, 1]else:    pre_words[word] = [pre_words[word][0], 1]for j in range(1, len(word)):if word[:j] not in pre_words:  pre_words[word[:j]] = [1, 0]else:  pre_words[word[:j]] = [1, pre_words[word[:j]][1]]res = [False] * len(s)for i in range(len(s)):if i > 0 and res[i - 1] != True: continuefor j in range(i + 1, len(s) + 1):if s[i:j] not in pre_words: breakpre, e = pre_words[s[i:j]]if e == 1: res[j - 1] = Trueif pre == 0: breakreturn res[-1]

 

  相关解决方案