本文介绍: 【代码】139. Word Break

139. Word Break

Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a spaceseparated sequence of one or more dictionary words.

Note that the same word in the dictionary may be reused multiple times in the segmentation.

 DP:

class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        wordSet = set(wordDict)
        n = len(s)
        dp = [False] * (n + 1)  # dp[i] 表示字符串的前 i 个字符是否可以拆分单词
        dp[0] = True  # 初始状态,空字符串可以拆分单词

        for i in range(1, n + 1): # 遍历背包
            for j in range(i): # 遍历单词
                if dp[j] and s[j:i] in wordSet:
                    dp[i] = True  # 如果 s[0:j] 可以拆分单词,并且 s[j:i] 在单词集合存在,则 s[0:i] 可以拆分成单词
                    break

        return dp[n]

backtracking:

class Solution:
    def backtracking(self, s: str, wordSet: set[str], startIndex: int) -> bool:
        # 边界情况:已经遍历字符末尾返回True
        if startIndex >= len(s):
            return True

        # 遍历所有可能拆分位置
        for i in range(startIndex, len(s)):
            word = s[startIndex:i + 1]  # 截取子串
            if word in wordSet and self.backtracking(s, wordSet, i + 1):
                # 如果截取子串字典中,并且后续部分可以拆分成单词,返回True
                return True

        # 无法进行有效拆分,返回False
        return False

    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        wordSet = set(wordDict)  # 转换哈希集合提高查找效率
        return self.backtracking(s, wordSet, 0)

原文地址:https://blog.csdn.net/Fai_B/article/details/134658322

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_43428.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注