leetcode140. 单词拆分 II 记忆化DFS

news2024/9/22 13:39:01
  • https://leetcode.cn/problems/word-break-ii

  • 给定一个字符串 s 和一个字符串字典 wordDict ,在字符串 s 中增加空格来构建一个句子,使得句子中所有的单词都在词典中。以任意顺序 返回所有这些可能的句子。

  • 注意:词典中的同一个单词可能在分段中被重复使用多次。

示例 1:

输入:s = "catsanddog", wordDict = ["cat","cats","and","sand","dog"]
输出:["cats and dog","cat sand dog"]
示例 2:

输入:s = "pineapplepenapple", wordDict = ["apple","pen","applepen","pine","pineapple"]
输出:["pine apple pen apple","pineapple pen apple","pine applepen apple"]
解释: 注意你可以重复使用字典中的单词。
示例 3:

输入:s = "catsandog", wordDict = ["cats","dog","sand","and","cat"]
输出:[]
 

提示:

1 <= s.length <= 20
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 10
s 和 wordDict[i] 仅有小写英文字母组成
wordDict 中所有字符串都 不同

题解

  • DFS解法:Input : 索引 Output:vector 或者 vector<vector >

  • 记忆化DFS用于处理在其他分支遇到相同情况的

  • 有重复部分的情况(dog部分)
    在这里插入图片描述

  • 没有重复部分的情况
    在这里插入图片描述

  • 记忆化DFS是一种优化搜索算法的方法,它通过在搜索过程中保存已经计算过的结果,避免重复计算,从而提高搜索效率。

具体来说,记忆化DFS的实现过程如下:

  1. 定义一个数组或哈希表,用于保存已经计算过的结果。数组或哈希表的下标是问题的状态,值是已经计算过的结果。

  2. 在DFS搜索过程中,首先检查当前状态是否已经计算过。如果已经计算过,直接返回保存的结果;如果没有计算过,继续进行搜索,并保存搜索结果。

  3. 在递归返回的过程中,将搜索结果保存到数组或哈希表中。

  4. 最后返回搜索结果。

记忆化DFS可以用于解决许多具有重叠子问题的问题,如动态规划、图论等问题。它可以大大减少重复计算,提高算法效率,但需要额外的空间来存储计算结果。

class Solution {
private:
    unordered_map<int, vector<string>> ans;
    unordered_set<string> wordSet;

public:
    vector<string> wordBreak(string s, vector<string>& wordDict) {
        wordSet = unordered_set(wordDict.begin(), wordDict.end());
        backtrack(s, 0);
        return ans[0];
    }

    void backtrack(const string& s, int index) {
        if (!ans.count(index)) {// 返回与 key 比较等于指定参数的元素数,该参数为 1 或 0,因为此容器不允许重复
            if (index == s.size()) {
                ans[index] = {""};
                return;
            }
            ans[index] = {};
            for (int i = index + 1; i <= s.size(); ++i) {
                string word = s.substr(index, i - index);
                if (wordSet.count(word)) {
                    backtrack(s, i);
                    for (const string& succ: ans[i]) {// std::string str = std::string("hello") + " world";  原因是在C++中,""括起来的字符串被当成是const char*类型,而非string类型。这是+操作无效
                        ans[index].push_back(succ.empty() ? word : word + " " + succ);
                    }
                }
            }
        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/739927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

趣谈拜占庭将军问题

拜占庭将军问题&#xff08;The Byzantine Generals Problem&#xff09;&#xff0c;它其实是借拜占庭将军的故事展现了分布式共识问题&#xff0c;还探讨和论证了解决的办法。而大多数人觉得它难理解&#xff0c;除了因为分布式共识问题比较复杂之外&#xff0c;还与莱斯利兰…

【C++ OJ练习】6.验证回文串

1.题目链接 力扣 2.解题思路 字母全部要变成小写 并且不能管空格和标点 这样从前和后分别遍历并进行比较 如果遇到不是相同 字符的话 说明不是回文串 就这样一直往下走 直到最后两下标相遇 那么就是回文串 注意双循环条件 3.代码 class Solution { public://除去标点和空…

【如何在深度学习的道路上越走越远?——《深度学习模式与实践》】

作为近几年人工智能领域的主要研究方向之一&#xff0c;深度学习主要通过构建深度卷积神经网络和采用大量样本数据作为输入&#xff0c;最终得到一个具有强大分析能力和识别能力的模型。深度学习可以是有监督的、半监督的或无监督的。深度学习架构(例如深度神经网络、深度信念网…

Docker查看相关存储信息以及扩容

Docker查看相关存储信息以及扩容 &#xff08;mac环境&#xff09; 查看docker基本信息&#xff1a; docker info可以看到docker的存储位置在这里 2. 查看mac的所有盘以及分区大小情况 diskutil listdocker查看网络信息&#xff1a; docker ps # 查看所有在运行的container信…

Zabbix——监控模板

方法二&#xff1a;自定义监控模板 案例&#xff1a;自定义监控客户端服务器登录的人数 需求&#xff1a;监控客户端的登录人数&#xff0c;超过 3 个就发出报警信息 1&#xff09;在客户端创建自定义 key #在客户端创建自定义 key1.明确需要执行的 linux 命令who | wc -l​…

分类分级一小步,数据安全一大步

启明星辰集团凭借自身在数据安全治理管控的技术优势及各类数据安全治理项目的经验积累&#xff0c;以数据安全治理管控平台&#xff08;DSMP&#xff09;为基础&#xff0c;定制研发出数据分类分级系统&#xff0c;它是一款面向数据对象&#xff0c;可实现数据自动化分类分级的…

计算机视觉中的感受野

一、感受野的定义 感受野&#xff08; R e c e p t i v e Receptive Receptive F i e l d Field Field&#xff09;的定义是卷积神经网络每一层输出的特征图&#xff08; f e a t u r e feature feature m a p map map&#xff09;上的像素点在原始输入图片上映射的区域大小…

4.10 x64dbg 反汇编功能的封装

LyScript 插件提供的反汇编系列函数虽然能够实现基本的反汇编功能&#xff0c;但在实际使用中&#xff0c;可能会遇到一些更为复杂的需求&#xff0c;此时就需要根据自身需要进行二次开发&#xff0c;以实现更加高级的功能。本章将继续深入探索反汇编功能&#xff0c;并将介绍如…

redis缓存简介

1、为什么使用redis 分析:博主觉得在项目中使用redis&#xff0c;主要是从两个角度去考虑:性能和并发。当然&#xff0c;redis还具备可以做分布式锁等其他功能&#xff0c;但是如果只是为了分布式锁这些其他功能&#xff0c;完全还有其他中间件(如zookpeer等)代替&#xff0c;并…

中国地图数据可视化制作,python的pyecharts模块读取excel可视化,

数据格式如下&#xff1a; import pandas as pd from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.globals import ChartType# 读取Excel数据 data pd.read_excel(C:\\Users\\Administrator\\Desktop\\国内数据.xlsx)# 创建地图实例 m…

C语言itoa转化为二进制

C语言itoa函数常常用于把整型转换为字符数组&#xff1b;最常用的是十进制的转换&#xff1b; 也可以用于获取一个数的二进制&#xff1b; 在C语言中 3&51&#xff1b;&是按位与&#xff1b; 先输出3&5&#xff1b; 再分别输出3和5的二进制看一下&#xff1b; …

Shader 基础之 Unity Shader概念

目录 目录 Shader compilation Conditionals in shaders Different types of conditionals Switch code branch at runtime Branching in shaders Static branching How to use static branching Dynamic branching How to use dynamic branching Shader variants …

选读SQL经典实例笔记04_日期运算(上)

1. 年月日加减法 1.1. DB2 1.1.1. sql select hiredate -5 day as hd_minus_5D,hiredate 5 day as hd_plus_5D,hiredate -5 month as hd_minus_5M,hiredate 5 month as hd_plus_5M,hiredate -5 year as hd_minus_5Y,hiredate 5 year as hd_plus_5Yfrom empwhere dept…

【计算机网络】第三章 数据链路层(虚拟机与局域网)

文章目录 3.9 以太网交换机自学习和转发桢的流程3.10 以太网交换机的生成树协议STP3.11 虚拟局域网3.11.1 虚拟局域网VLAN概述3.11.2 虚拟局域网VLAN的实现机制 3.9 以太网交换机自学习和转发桢的流程 以太网交换机的自学习和转发数据帧的流程如下&#xff1a; 自学习&#x…

Mac中使用命令行来加密压缩zip文档

背景 最近需要对一些文件加密&#xff0c;但是Mac上没有找到相应的加密工具&#xff0c;macOS中创建密码保护的压缩 zip 文件很容易并且不需要任何额外附加物或下载。使用命令行的方式处理即可。对压缩包加密之后便意味着有人想要解压缩zip文件时&#xff0c;必须输入正确的密码…

Layui入门必看:登录注册界面搭建与功能开发解析

目录 Layui介绍 什么是Layui&#xff1f; Layui入门 Layui登录实例 导入jar 配置 导入Layui 编写公共jsp 编写代码 Layui注册实例 代码实例 Layui介绍 Layui是一款面向前端开发者的轻量级JavaScript库&#xff0c;旨在简化网页开发过程。它提供了丰富的基础UI组件和…

电气设备漏电保护方式研究

摘要&#xff1a;电气设备漏电故障可能对无防范意识人员产生触电危害&#xff0c;轻者灼伤人体接触位置&#xff0c;重者危及人员生命&#xff0c;甚至会产生漏电火花引起火灾&#xff0c;给企业带来不可估计的损失。文中浅谈电气设备漏电危害性及漏电保护方式&#xff0c;意指…

C++使用rapidjson读写json数据

一、背景 RapidJSON简介及使用_fengbingchun的博客-CSDN博客 rapidjson是腾讯的高效C Json解析器&#xff0c;只有头文件&#xff0c;可跨平台使用 mirrors / Tencent / rapidjson GitCode 二、读数据 使用rapidjson解析和组装json_youyicc的博客-CSDN博客 三、写数据 …

AES加解密算法强化训练

目标&#xff1a; 使用openssl算一遍&#xff0c;再使用网页在线工具算一遍&#xff0c;看看结果是否一样 构造数据 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件&#xff0c;记得删除换行符 然后用ultraedit打开&#xff0c;…

常见加密算法介绍

文章目录 一、背景&#xff1a;二、几种常见的加密算法1. 不可逆加密算法&#xff08;哈希算法&#xff09;&#xff1a;1.1 MD51.1.1 优点&#xff1a;1.1.2 缺点&#xff1a;1.1.3 Demo&#xff1a;1.1.4 案例分析&#xff1a; 1.2 SHA-2561.2.1 Demo&#xff1a;1.2.2 案例分…