当前位置: 首页 > article >正文

算法学习day46

算法学习day46

  • 1.力扣 139.单词拆分
    • 1.1 分析
    • 1.2 代码
  • 2.参考资料

1.力扣 139.单词拆分

1.1 分析

题目描述:给定一个非空字符串s和一个包含非空单词的列表wordDict,判断s是否可以被空格拆分成为一个 或者多个在字典中出现的单词。

说明:

拆分时可以重复使用字典中的单词。

你可以假设字典中没有重复的单词。

1.确定dp数组以及下标的含义

dp[i]:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。

2.确定递推公式

如果确定dp[j]是true,且[j, i]这个区间的的子串出现在字典里,那么dp[i]一定是true。

递推公式: if([j ,i]这个区间的子串出现在字典里 && dp[j]是ture) 那么dp[i] = true。

3.dp数组如何初始化

dp[0]为true.

4.确定遍历顺序

如果求组合数就是外层for循环遍历物品,内层for遍历背包

如果求排列数就是外层for遍历背包,内层for循环遍历物品

本题是先遍历背包,在遍历物品。

5.举例推导dp[i]

在这里插入图片描述

1.2 代码

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        // 将字典转换为unordered_set,便于快速查找
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        // dp数组,dp[i]表示s的前i个字符是否能被拆分成字典中的单词
        vector<bool> dp(s.size() + 1, false);
        // 初始化dp数组,空字符串可以被拆分成一个空单词
        dp[0] = true;
        // 遍历s的所有子串,寻找子串是否在字典中存在,并且前面的字符串也能被拆分成字典中的单词
        for (int i = 1; i <= s.size(); i++) {   // 遍历背包
            for (int j = 0; j < i; j++) {       // 遍历物品
                // 截取s的第j个字符到第i个字符组成的子串
                string word = s.substr(j, i - j); //substr(起始位置,截取的个数)
                // 如果字典中存在该子串,并且前面的字符串也能被拆分成字典中的单词,则dp[i]为true
                if (wordSet.find(word) != wordSet.end() && dp[j]) {
                    dp[i] = true;
                }
            }
        }
        // 返回dp[s.size()],表示s的前s.size()个字符能否被拆分成字典中的单词
        return dp[s.size()];
    }
};

2.参考资料

[代码随想录]


http://www.kler.cn/a/5858.html

相关文章:

  • scrapy爬取图片
  • MMDetection框架下的常见目标检测与分割模型综述与实践指南
  • 【MySQL 保姆级教学】用户管理和数据库权限(16)
  • 日语IT用语笔记
  • linux音视频采集技术: v4l2
  • STM32供电参考设计
  • 详细手把手教会二叉树链式结构【数据结构】
  • 【数据库管理】①实例与数据库
  • Springboot: Tomcat很好我选Undertow
  • ShareSDK Android 第三方平台分享参数说明
  • MySQL - 基于SSL安全连接的主从复制
  • 蓝桥杯31天真题冲刺|题解报告|第二十三天
  • Python中编码【encode】解码【decode】讲解
  • k8s qos等级
  • 【Windows版】VScode配置C++开发环境
  • Python实现提前查询考研成绩
  • 大家有没有时候觉得,递归,分治,回溯,傻傻分不清楚?
  • 设计LFU缓存结构(美团面试算法题)
  • 骨传导蓝牙耳机什么牌子,推荐几款比较热销的骨传导耳机
  • 【Elastic (ELK) Stack 实战教程】04、ElasticSearch 集群进阶及优化
  • Java-双向链表的实现
  • 【软件设计师03】数据库系统
  • 电路板焊接技巧实践(没有电烤箱条件下)
  • 人工智能交互革命:探索ChatGPT的无限可能 第13章ChatGPT的应用场景和创新应用
  • 智慧办公抉择之——VBA与Python的选择
  • MySQL尚硅谷学习笔记之DQL语言