LeetCode解題之Word Break
原題
給定一個目標字符串和一組字符串,判斷目標字符串能否拆分成數個字符串,這些字符串都在給定的那組字符串中。
注意點:
- 無
例子:
輸入: s = “leetcode”, wordDict = {“leet”, “code”}
輸出: True
解題思路
採用動態規劃的方法解決,dp[i]表示字符串s[:i]能否拆分成符合要求的子字符串。我們可以看出,如果s[j:i]在給定的字符串組中,且dp[j]爲True(即字符串s[:j]能夠拆分成符合要求的子字符串),那麼此時dp[i]也就爲True了。按照這種遞推關係,我們就可以判斷目標字符串能否成功拆分。
AC源碼
class Solution(object):
def wordBreak(self, s, wordDict):
"""
:type s: str
:type wordDict: Set[str]
:rtype: bool
"""
n = len(s)
dp = [False] * (n + 1)
dp[0] = True
for i in range(n):
for j in range(i, -1, -1):
if dp[j] and s[j:i + 1] in wordDict:
dp[i + 1] = True
break
return dp[n]
if __name__ == "__main__":
assert Solution().wordBreak("leetcode", {"leet", "code"}) == True
歡迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 來獲得相關源碼。