【代码随想录训练营】【Day 49】【动态规划-8】| Leetcode 139

【代码随想录训练营】【Day 49】【动态规划-8】| Leetcode 139

需强化知识点

题目

139. 单词拆分

  • 注意 要保证 单词构成的有序性,先遍历背包,再遍历物品
  • 回溯法
python 复制代码
class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        # 0-i 的 单词能否由 字典构成
        dp = [False] * (len(s) + 1)
        dp[0] = True

        # 先遍历背包,再遍历物品
        for i in range(1, len(s) + 1):
            for word in wordDict:
                if i >= len(word) and word == s[i-len(word):i]:
                    dp[i] = dp[i] or dp[i-len(word)]
        
        return dp[len(s)]
    
  • 感受 backtracking 返回布尔值
python 复制代码
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)
相关推荐
Lumos_77722 分钟前
Linux -- 线程
java·jvm·算法
七颗糖很甜1 小时前
“十五五”气象发展规划:聚焦五大核心任务
大数据·python·算法
科研前沿1 小时前
镜像视界浙江科技有限公司的关键技术突破有哪些?
大数据·人工智能·科技·算法·音视频·空间计算
嫩萝卜头儿1 小时前
2 - 复杂度收尾 + 链表经典OJ
数据结构·算法·链表·复杂度
星马梦缘1 小时前
算法设计与分析 作业二 答案与解析
算法·图论·dfs·bfs·floyd-warshall·bellman_ford·多源最短路
玛丽莲茼蒿1 小时前
Leetcode hot100 每日温度【中等】
算法·leetcode·职场和发展
cjp5601 小时前
009.UG二次开发,任务环境草图优化3(高级功能生成直线)
算法
样例过了就是过了2 小时前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
逻辑驱动的ken2 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
北顾笙9802 小时前
day38-数据结构力扣
数据结构·算法·leetcode