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

1.题目解析

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

测试用例

2.算法原理

1.状态表示

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

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

2.状态转移方程

这里的状态转移方程不是很重要,重要的是如何判断一个字符串是否可以使用字典中的单词拼凑而成,这里的思路就是首先使用i向后移动遍历字符串每个长度的子数组,使用j指针从i位置向前移动,判断区间[1,j-1]以及[j,i]这两个区间是否都可以被字典中的单词拼凑出来,是则将dp[i]置为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];
    }
};
相关推荐
nju_spy4 分钟前
12月力扣每日一题(划分dp + 单调栈 + 堆 + 会议安排)
算法·leetcode·二分查找·动态规划·滑动窗口·单调栈·最大堆
智算菩萨6 分钟前
【Python机器学习】支持向量机(SVM)完全指南:从理论到实践的深度探索
算法·机器学习·支持向量机
中國龍在廣州9 分钟前
2025,具身智能正在惩罚“持有者”
人工智能·深度学习·算法·自然语言处理·chatgpt
Tandy12356_11 分钟前
手写TCP/IP协议——实现ping的响应
c语言·网络·c++·网络协议·tcp/ip·计算机网络
爱学习的capoo13 分钟前
电气控制与PLC考点(自用)
算法
Li.CQ14 分钟前
正则学习笔记
笔记·学习
幺零九零零18 分钟前
压测学习-JMeter( 二)
学习·jmeter
byzh_rc23 分钟前
[算法设计与分析-从入门到入土] 递归
数据库·人工智能·算法·机器学习·支持向量机
Yuer202526 分钟前
WebRTC 实时语音交互如何支持“可中断”?为什么状态机(FSM)是绕不开的方案
算法·rust·webrtc·fsm
CoderCodingNo30 分钟前
【GESP】C++五级真题(数论、埃氏筛思想考点) luogu-B3969 [GESP202403 五级] B-smooth 数
开发语言·c++·算法