当前位置: 首页 > news >正文

leetcode_字典树 139. 单词拆分

139. 单词拆分

  • 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。

  • 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

  • 思路:

    1. 定义状态:
    • 设dp[i]表示字符串s的前 i 个字符(即 s[0:i])

    • 需计算 dp[len(s)],即整个字符串 s 是否可以被拼接

    1. 状态转移方程:
    • 对于每个位置i,需要检查所有可能的分割点 j(0 <= j < i),检查 s[j:i] 是否在字典中,并且 dp[j] 是否为 true

    • 如果存在这样的j,则 dp[i] = true

class Solution(object):
    def wordBreak(self, s, wordDict):
        """
        :type s: str
        :type wordDict: List[str]
        :rtype: bool
        """
        # 将字典转换为集合,方便快速查找
        wordSet = set(wordDict)
        n = len(s)
        
        dp = [False] * (n + 1)
        # 创建n+1个值全为False的数组dp
        dp[0] = True  
        # 空字符串可以被拼接
        
        for i in range(1, n + 1):  
        # 遍历所有可能的结束位置
            for j in range(i):  
            # 遍历所有可能的分割点
                if dp[j] and s[j:i] in wordSet:  
                # 如果s[j:i]在字典中,且dp[j] 为true
                    dp[i] = True
                    break  
                    # 找到一个有效的分割点即可
        
        return dp[n]
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(n)

相关文章:

  • 性能测试分析和调优
  • 【Linux】Linux的进程控制
  • Flutter系列教程之(8)——CheckBox多选框及动态更改多选框
  • VSCode大的JSON数据不能折叠问题
  • Spring Boot 消息队列(以RabbitMQ为例)
  • 【AI论文】MedVLM-R1:通过强化学习激励视觉语言模型(VLMs)的医疗推理能力
  • 基于STM32语音识别的智能家居
  • Redis分布式缓存面试题(2025.3.1更新)
  • Vue3.x 封装一个简单的日历
  • 《操作系统 - 清华大学》 9 -2:进程调度:调度原则
  • 嵌入式系统中总线、指令集与ARM架构解析
  • 智慧校园平台在学生学习与生活中的应用
  • 一周热点:基于向量的推理,而非文本
  • 【最后203篇系列】010 关于矩阵的一点思考
  • PostgreSQL 创建表格
  • JDK17安装方法/如何安装JDK17/环境变量配置
  • Android Activity启动流程详解
  • 第四章 activiti流程 “BPMN2.0规范解密室”
  • Transformer 代码剖析10 - TransformerEmbedding (pytorch实现)
  • 大白话css第五章CSS新特性与前沿技术、跨平台与跨设备适配
  • 提高审美的网站推荐/网络服务商电话
  • wordpress登陆加快/seo黑帽优化
  • 蜜雪冰城网站建设策划方案/万网域名查询注册商
  • 东莞seo网站建设公司/二级网站怎么做
  • 苏州高端网站制作机构/百度app下载安装
  • jquery网站开发平台/友情链接赚钱