LeetCode Word Break

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) 來獲得相關源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章