动态规划-子数组系列——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];
    }
};
相关推荐
小黄人软件13 小时前
如何解决不想学、学不会、学不进去,吸收内化不了学的东西,怎么办?如何真正建立“知识内化系统“?不输出,不学习
学习
长不胖的路人甲13 小时前
什么是赫夫曼树(哈夫曼树 / Huffman Tree)
python·算法·霍夫曼树
choumin13 小时前
创建型模式——原型模式
c++·设计模式·原型模式·创建型模式
Warren2Lynch14 小时前
掌握 UML 构造型、标记定义与标记值:面向领域特定建模的 UML 扩展全面指南
大数据·算法·uml
1570925113414 小时前
【无标题】
开发语言·python·算法
稚南城才子,乌衣巷风流15 小时前
换根法(Rerooting)算法详解
算法
晓梦林15 小时前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
晓子文集15 小时前
Tushare接口文档:期货交易日历(fut_trade_cal)
大数据·算法
王维同学15 小时前
Credential Provider、Filter 与 PLAP 的 CLSID 枚举
c++·windows·安全·注册表
2601_9638701715 小时前
【计算机毕业设计】基于Spring Boot的社区老年大学课程报名与学习系统的设计与实现
java·spring boot·学习