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) 来获得相关源码。

你可能感兴趣的:(LeetCode,算法,python,动态规划)