跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

动态规划:单词拆分问题详解

介绍使用动态规划解决单词拆分问题的方法。核心思路是定义 dp[i] 表示字符串前 i 个字符能否由字典单词拼接而成。通过遍历分割点 j,检查 dp[j-1] 是否为真且子串 s[j-1:i] 在字典中,从而更新 dp[i]。文章包含状态定义、转移方程、初始化及 C++ 代码实现。

草莓泡芙发布于 2026/3/29更新于 2026/5/2935 浏览
动态规划:单词拆分问题详解

1. 单词拆分

139. 单词拆分 - LeetCode

2. 算法原理

状态表示: 以某一个位置为结尾。dp[i] 表示在 [0, i] 区间里的字符串,能否被字典中的单词拼接而成。如果可以拼接则存储 true,否则为 false。

状态转移方程: 根据最后一个位置来划分问题。最后一个位置可能是由最后一个字符、最后两个字符...或整个字符串构成最后一个单词。 将区间划分为两部分:前面的部分能够拼接且后面的部分在字典中,则整个字符串可拼接。 设 j 表示最后一个单词起始位置的下标 (0 < j <= i)。 dp[i] 分为两种情况:

  1. dp[j-1] == true && s(j~i) 是否在字典中
  2. false

初始化: 需要加上一个虚拟节点,防止越界。dp[0] = true,表示空字符串可以拼接。

填表顺序: 从左往右。

返回值: 题目要求 + 状态表示,即 dp[n]。

3. 代码

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> hash;
        for (const auto& word : wordDict) hash.insert(word);
        int n = s.size();
        vector<bool> dp(n + 1, false);
        dp[0] = true;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= i; ++j) {
                if (dp[j - 1] && hash.count(s.substr(j - 1, i - j + 1))) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
};

目录

  1. 1. 单词拆分
  2. 2. 算法原理
  3. 3. 代码
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Whisper 模型微调实战:如何适配中文场景
  • 力扣 Hot100 链表算法题解(上)
  • 腾讯云轻量应用服务器部署 OpenClaw 并接入 QQ 飞书机器人
  • Trae AI 编辑器安装与核心功能使用指南
  • AI 辅助艺术创作:风格迁移与构图生成
  • OpenClaw 与 Telegram 机器人集成指南
  • Android Termux 安装 llama.cpp 并启动 WebUI
  • FPGA 调试:PCIe XDMA Link Up 失败使用 LTSSM 定位问题
  • 近五年体内微纳米机器人赋能肿瘤精准治疗综述:聚焦 GBM
  • OpenClaw 配置与 QQ 机器人接入指南
  • Windows 11 国内快速安装 WSL Ubuntu 22.04 三种方法及离线包下载
  • 扣子(Coze)平台入门与 AI Bot 开发实战指南
  • OpenClaw WebUI Chat 工作流程及核心组件
  • 前端监控实战:错误、性能与用户行为监控方案
  • 2026 年 11 款开源及免费项目管理工具选型对比与优劣分析
  • OpenClaw 国内安装与服务器部署及飞书对接教程
  • Python 网络爬虫实战:批量抓取网页图片示例
  • QGIS 到 WebGIS:网络瓦片地图离线化与可视化实战
  • 前端拖拽排序实现详解:从原理到实践
  • Supabase 实战指南:从云服务到本地部署及行级安全策略

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online