leetcode139 單詞拆分

2021-10-01 22:35:01 字數 1699 閱讀 7201

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典**現的單詞。

說明:拆分時可以重複使用字典中的單詞。

你可以假設字典中沒有重複的單詞。

示例 1:

輸入: s = "leetcode", worddict = ["leet", "code"]

輸出: true

解釋: 返回 true 因為 "leetcode" 可以被拆分成 "leet code"。

示例 2:

輸入: s = "catsandog", worddict = ["cats", "dog", "sand", "and", "cat"]

輸出: false

方法一:帶記憶化的dfs

我們可以使用記憶化的方法,這裡我們的記憶集合cache,會被用來儲存不能成功拆分的尾部剩餘字串,如果在遞迴中有true發生,意味著當前尾部被成功劃分了,而之所能到達當前這個尾部字串是因為這個尾部之前能夠被劃分成功,所以代表整體也劃分成功了,運算在此處就可以全部結束了。

方法二:dp

方法一:

class solution(object):

def dfs(self, s, worddict, cache, start):

if start >= len(s):

return true

if start in cache:

return false

for i in range(start+1,len(s)+1):

if s[start:i] in worddict and self.dfs(s,worddict,cache,i):

return true

# 被用來儲存不能成功拆分的尾部剩餘字串

cache.add(start)

return false

def wordbreak(self, s, worddict):

""":type s: str

:type worddict: list[str]

:rtype: list[str]

"""cache = set()

worddict = set(worddict)

return self.dfs(s, worddict, cache, 0)

方法二:

class solution(object):

def wordbreak(self, s, worddict):

""":type s: str

:type worddict: list[str]

:rtype: bool

"""length=len(s)

dp=[false]*(length+1)

dp[0]=true

for i in range(1,length+1):

for j in range(0,i):

if dp[j] and (s[j:i] in worddict):

dp[i]=true

break

return dp[length]

leetcode 139 單詞拆分

題目 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,確定 s 是否可以被空格分割為乙個或多個在字典裡出現的單詞。你可以假設字典中無重複的單詞。例如,給出 s leetcode dict leet code 返回 true 因為 leetcode 可以被切分成 leet cod...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典中出現的單詞。說明 拆分時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。動態規劃,dp i 表示前i個字元能否被拆分 class solution def wordbreak self,s str,worddict list str bool ...