【学会动态规划】单词拆分(24)

简介: 【学会动态规划】单词拆分(24)

动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:139. 单词拆分 - 力扣(LeetCode)

题目很好理解,就是给我们一个字典,

看是否能够用字典里的字符串拼接成他给的目标字符串 s。

2. 算法原理

1. 状态表示

dp[ i ] 表示的是从起点到 dp[ i ] 的字符串是否能被字典里的字符串拼接成,

如果成就是 true,否则就是 false

2. 状态转移方程

根据最后一个位置的情况来划分问题,

我们可以把它分成两个区间来分析,

左区间能否可以拼接成功?右区间是否是字典里的字符串?

所以我们的状态转移方程就是:

左区间 == true && 右区间存在字典中,否则就是 false

3. 初始化

为了防止越界加一个虚拟的头结点即可。

4. 填表顺序

从左往右。

5. 返回值

返回 dp 表的最后一个位置

3. 代码编写

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> st;
        for(auto e : wordDict) st.insert(e);
        vector<bool> dp(s.size() + 1);
        dp[0] = true;
        for(int i = 0; i <= s.size(); i++) {
            for(int j = 0; j < i; j++) {
                if(dp[j] && st.find(s.substr(j, i - j)) != st.end()) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[s.size()];
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
4月前
|
Java C++
leetcode-139:单词拆分
leetcode-139:单词拆分
25 0
|
4月前
|
存储 索引
leetcode139单词拆分刷题打卡
leetcode139单词拆分刷题打卡
21 0
|
8月前
【动态规划刷题 12】单词拆分 && 环绕字符串中唯一的子字符串
【动态规划刷题 12】单词拆分 && 环绕字符串中唯一的子字符串
|
4月前
|
算法 测试技术
代码随想录 Day39 动态规划 LeetCode T139 单词拆分 动规总结篇1
代码随想录 Day39 动态规划 LeetCode T139 单词拆分 动规总结篇1
35 0
|
4月前
|
Python C++ 机器人
C/C++每日一练(20230419) 插入区间、单词拆分、不同路径
C/C++每日一练(20230419) 插入区间、单词拆分、不同路径
23 0
C/C++每日一练(20230419) 插入区间、单词拆分、不同路径
|
4月前
|
自然语言处理
leetcode-140:单词拆分 II
leetcode-140:单词拆分 II
26 0
|
4月前
|
算法 测试技术 C#
【滑动窗口】LeetCode:30串联所有单词的子串
【滑动窗口】LeetCode:30串联所有单词的子串
|
9月前
|
算法
算法练习Day46|139.单词拆分
算法练习Day46|139.单词拆分
|
10月前
|
算法 Java C++
leetcode单词拆分
leetcode单词拆分
LeetCode 139. 单词拆分
LeetCode 139. 单词拆分
56 0
LeetCode 139. 单词拆分