动态规划-子数组系列——139.单词拆分

1.题目解析

题目来源:139.单词拆分------力扣

测试用例

2.算法原理

1.状态表示

创建dp表,dpi表示:以第i个位置为结尾前面的字符串是否可以使用字典中的单词拼凑而成

所以dp表存储的是bool类型的数据

2.状态转移方程

这里的状态转移方程不是很重要,重要的是如何判断一个字符串是否可以使用字典中的单词拼凑而成,这里的思路就是首先使用i向后移动遍历字符串每个长度的子数组,使用j指针从i位置向前移动,判断区间1,j-1以及j,i这两个区间是否都可以被字典中的单词拼凑出来,是则将dpi置为true

3.初始化

开辟一个虚拟节点置为true,不会影响填表顺序也可以直接在循环内初始化

4.填表顺序

从左到右

5.返回值

返回最后一个位置的dp表的值

3.实战代码

cpp 复制代码
class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) 
    {
        int n = s.size();
        unordered_set<string> hash;
        for(auto& e : wordDict)
        {
            hash.insert(e);
        }
        s = ' ' + s;

        vector<bool> dp(n+1);
        dp[0] = true;

        for(int i = 1;i <= n;i++)
        {
            for(int j = i;j >= 1;j--)
            {
                if(dp[j-1] && hash.count(s.substr(j,i-j+1)))
                {
                    dp[i] = true;
                }
            }
        }
        return dp[n];
    }
};
相关推荐
(Charon)2 分钟前
【C++面试】手写String类:同时实现拷贝构造与移动构造
c++·算法
程序员老陆3 分钟前
通过std::unique_ptr初始化std::shared_ptr
开发语言·c++
迷途之人不知返20 分钟前
算法系列6:模拟
算法
旺仔仔仔29 分钟前
# 机器人项目实战(1):选相机、试深度,再到手眼标定
算法
CoderYanger40 分钟前
A.每日一题:1614. 括号的最大嵌套深度
java·程序人生·算法·leetcode·面试·学习方法
yuki蜜语44 分钟前
别只会调包跑模型!一文讲透大模型训练底层的“递推、递归、三明治”三重逻辑
算法
JWASX44 分钟前
Java 转 go 学习 - GRPC(1)
学习·golang
成旭先生1 小时前
银行卡识别 API:一张照片读出卡号、BIN 与发卡行
人工智能·算法·ocr·api接口·金融科技·银行卡识别·支付风控
陌上花开缓缓归以1 小时前
mebdlts3.4.1安全启动全流程
服务器·算法
鬼手点金1 小时前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播