算法日常・每日刷题--<动态规划>25

139. 单词拆分 - 力扣(LeetCode)

题目描述

给你一个字符串 s 和一个字符串列表 word_dict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s。

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

解法

状态转移

遍历分割点 j(1 ≤ j ≤ i):

  1. dp[j-1] == true:字符串前 j-1 个字符可以成功拆分;
  2. 截取子串:s.substr(j-1, i-j+1),代表从下标 j-1 开始,长度为 i-j+1 的子串;
  3. 如果这段子串存在于单词字典中,说明:前i个字符可以拆分,令dp[i]=true,直接 break 内层循环,不用继续找其他分割点。
cpp 复制代码
#include <algorithm>

class Solution {
public:
    bool wordBreak(string s, vector<string>& word_dict) {
        int n = s.size();
        unordered_set<string> wordDict(word_dict.begin(), word_dict.end());
        vector<bool> dp(n + 1, false);
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                string word = s.substr(j - 1, i - j + 1);
                if (dp[j-1] == true && wordDict.count(word)) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
};
相关推荐
ZhengEnCi17 分钟前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是1 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考1 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt3 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one5 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼5 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记6 小时前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision10 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.33311 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn