LeetCode Word Break

来源:互联网 发布:飞思卡尔单片机怎么学 编辑:程序博客网 时间:2024/06/10 03:17

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

0 0