算法日常・每日刷题--<动态规划>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];
    }
};
相关推荐
Keep_Trying_Go1 小时前
分割算法FastSAM论文详解
深度学习·算法·计算机视觉
星夜离尘561 小时前
MATLAB 5 点滑动平均:filter 与 conv 的输出对齐,以及 2 样本延时的含义
开发语言·算法·matlab·滤波·fir
Dovis(誓平步青云)1 小时前
总用电下降了,为什么家庭能源看板仍然提示异常
java·开发语言·数据库·人工智能·算法·电脑·能源
开开心心就好1 小时前
A3的PDF怎么切成A4?拖一下分割线就行
服务器·开发语言·python·算法·pdf·ocr·tornado
闻缺陷则喜何志丹1 小时前
详细设计说明书的内容要求
算法·测试·存储
和裕2 小时前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
Tisfy2 小时前
LeetCode 3723.数位平方和的最大值:构造
数学·算法·leetcode·字符串·题解
hetao17338372 小时前
联盟场-提高组-R4 & ZYZSC-S-Round 7
c++·算法
碧海银沙音频科技研究院2 小时前
基于炬芯ATS3089X音箱的音乐播放歌词显示功能实现
人工智能·驱动开发·嵌入式硬件·算法