力扣 139. 单词拆分

一、题目描述

给你一个字符串 s 和一个字符串列表 word_dict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

二、题解

通过回溯法进行暴力求解,时间复杂度 O ( n × 2 n ) O(n \times 2^n) O(n×2n),空间复杂度 O ( n ) O(n) O(n)

class Solution {
public:bool wordBreak(string s, vector<string> &word_dict) {unordered_set<string> word_set(word_dict.begin(), word_dict.end());return backtracking(s, word_set, 0);}private:bool backtracking(string &s, unordered_set<string> &word_set, int begin_index) {if (begin_index == s.size()) {return true;}for (int i = begin_index; i < s.size(); i++) {string temp = s.substr(begin_index, i - begin_index + 1);if (word_set.find(temp) != word_set.end()) {/* temp在字典中存在 */if (backtracking(s, word_set, i + 1)) {/* 拼接成功 */return true;}}}return false;}
};

上述方法在递归的过程中有很多重复计算,可以使用数组保存一下递归过程中计算的结果,虽然时间复杂度和空间复杂度没有改变,但是进行了大量剪枝,从而实现了优化。

通过回溯法进行记忆化递归求解,时间复杂度 O ( n × 2 n ) O(n \times 2^n) O(n×2n),空间复杂度 O ( n ) O(n) O(n)

class Solution {
public:bool wordBreak(string s, vector<string> &word_dict) {unordered_set<string> word_set(word_dict.begin(), word_dict.end());vector<bool> valid_tag(s.size(), true); // true表示初始值,false表示从当前下标开始无法完成拼接return backtracking(s, word_set, valid_tag, 0);}private:bool backtracking(string &s, unordered_set<string> &word_set, vector<bool> &valid_tag, int begin_index) {if (begin_index == s.size()) {return true;}/* 之前已经处理过从begin_index开始的拼接了,并且最终无法完成拼接 */if(!valid_tag.at(begin_index)) {return false;}for (int i = begin_index; i < s.size(); i++) {string temp = s.substr(begin_index, i - begin_index + 1);if (word_set.find(temp) != word_set.end()) {/* temp在字典中存在 */if (backtracking(s, word_set, valid_tag, i + 1)) {/* 拼接成功 */return true;}}}/* 从begin_index开始无法完成拼接 */valid_tag.at(begin_index) = false;return false;}
};

通过动态规划求解,由于二层循环里面对word_set的 find() 操作本质也是遍历,因此时间复杂度 O ( n 3 ) O(n^3) O(n3),空间复杂度 O ( n ) O(n) O(n)

class Solution {
public:bool wordBreak(string s, vector<string> &wordDict) {unordered_set<string> word_set(wordDict.begin(), wordDict.end());vector<bool> dp(s.size(), false); // dp[i]为true表示字符串s[0:i]可以被成功拼接/* 根据s.at(0)能否被拼接初始化动态规划数组 */if (word_set.find(s.substr(0, 1)) != word_set.end()) {dp.at(0) = true;}/* 从左向右递推 */for (int i = 1; i < s.size(); i++) {/* 如果s[0:i]本身就在字典中,直接continue */if (word_set.find(s.substr(0, i + 1)) != word_set.end()) {dp.at(i) = true;continue;}/* 依次判断s[0:j-1]和s[j:i]的状态 */for (int j = 1; j <= i; j++) {if (word_set.find(s.substr(j, i - j + 1)) != word_set.end() && dp.at(j - 1)) {dp.at(i) = true;continue;}}}return dp.at(dp.size() - 1);}
};

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

解单词拆分问题

问题描述&#xff1a; 题目&#xff1a;Leetcode第139题 难度&#xff1a;中等 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重…

一次 Netty 不健壮导致的无限重连分析

由于 OOM 导致不健壮的 Netty 一系列诡异的行为&#xff0c;这次的问题分析会比上次那个更有意思一点。&#xff08;备注&#xff1a;本文 Netty 版本是上古时代的 3.7.0.Final) 现象描述 开发的同学反馈 dubbo 客户端无法调用远程的服务&#xff0c;抓包来看&#xff0c;客户…

G2SAT: Learning to Generate SAT Formulas论文精读

0. Abstract SAT&#xff08;布尔可满足&#xff09;问题被证明是一个经典的np完全问题&#xff0c;作为一个计算机科学的基本问题&#xff0c;在决策、验证和理论证明等很多方面都有应用。目前的SAT求解器的开发和评估依赖于现有的有限的现实问题&#xff0c;且现有的手工制作…

【论文精读】A Survey on Knowledge Graphs Representation, Acquisition and Applications

A Survey on Knowledge Graphs Representation, Acquisition and Applications 前言Abstract1. INTRODUCTIONII. OVERVIEWA. A Brief History of Knowledge BasesB. Definitions and NotationsC. Categorization of Research on Knowledge GraphD. Related Surveys III. KNOWLE…

SharpContour论文精读

SharpContour: A Contour-based Boundary Refinement Approach for Efficient and Accurate Instance Segmentation 论文链接&#xff1a;[2203.13312] SharpContour: A Contour-based Boundary Refinement Approach for Efficient and Accurate Instance Segmentation (arxiv…

【论文精读】HumanNeRF

目录 Abstract1.Introduction2.Related workHuman specific renderingNeural radiance fieldsHuman-specific neural renderingConcurrent work 3.Representing a Human as a Neural FieldCanonical volumeSkeletal motionNon-rigid motionPose correction 4.Optimizing a Huma…

GAN论文精读以及基础讲解

GAN精读论文&#xff1a;Neurips-2014-Generative Adversarial Nets 根据李沐老师的讲解加上笔者个人的理解做的一个笔记&#xff0c;希望能够对想了解GAN的求学者有所帮助&#xff01; 一、标题、作者、期刊 论文的标题名为Generative Adversarial Nets&#xff0c;中文解释…

我在工作群和ChatGPT聊了会天,找到了升职加薪的新思路

ChatGPT 大火&#xff01; 我们知道&#xff0c;基于 AIGC 的 ChatGPT 可以整合信息并“回复”给我们所需的很多类答案&#xff0c;比如写论文、作诗、画画&#xff0c;不过现在&#xff0c;ChatGPT 已经从火出圈的现象级 AI 应用&#xff0c;迅速被更多开发者融入到更多产品工…

容联七陌:ChatGPT大模型能力为智能客服带来新方向

科技云报道原创。 近几个月来&#xff0c;大众对ChatGPT预期的持续走高&#xff0c;也影响到了智能客服领域公司的命运。 一方面&#xff0c;ChatGPT的出现为智能客服场景带来了更加“智能”的可能性&#xff1b;但另一方面&#xff0c;有人认为ChatGPT完全可以替代现有的智能…

ChatGPT爆火之后,视觉研究者坐不住了?谷歌将ViT参数扩大到220亿

本文来源 机器之心 编辑&#xff1a;泽南 视觉模型有很大的提升空间&#xff0c;研究者们在以往的 LLM 中学到经验教训&#xff0c;认为扩展是一个很有前途的方法。来自谷歌的研究者将 ViT 扩展到 22B 参数量&#xff0c;这是迄今为止报道的最大的视觉主干。 与自然语言处理类…

Android之Android studio实现智能聊天机器人

Android实现智能聊天机器人 最近在做项目中,突然来了灵感,要做一个聊天机器人.聊天机器人在很多大型App上都有使用,比如QQ群里的QQ小冰,淘宝京东等App上在没有人工客服之前会有机器人跟你聊天,根据你发的问题关键词,向你推荐一些答案,可以省下很多人工的时间以及减小服务器的压…

图像复原之维纳滤波

基本原理 图像复原是图像处理的重要组成部分&#xff0c;由于图像在获取和传输过程中通常不可避免的要受到一些噪声的干扰&#xff0c;因此在进行其他图像处理以及图像分析之前&#xff0c;应该尽量将图像复原到其原始真实状态。图像复原的关键问题是在于建立退化模型。图像退…

图像复原

1图像复原的而理论模型 定义&#xff1a;在成像过程中&#xff0c;由于成像系统各种因素的影响&#xff0c;可能使获得的图像不是真实景物的完善影像。图像在形成、传播和保存过程中使图像质量下降的过程&#xff0c;称为图像退化。图像复原就是重建退化的图像&#xff0c;使其…

UBI.city白皮书发布与空投领取方法

在经历了至少5次的全面推翻与重构后&#xff0c;UBI.city的方案终于可以发布了。 UBI.city简介 UBI.city是去中心化组织的动态治理协议&#xff0c;白皮书可在官网 www.ubi.city 中查阅。 随着The DAO在2016年募集了1170万枚ETH&#xff08;价值约2.45亿美元&#xff09;&am…

WhatsApp被禁用操作教程|实操WhatsApp解封的过程|2023三月

我是上周被WhatsApp被禁用了&#xff0c;按照网上的方法&#xff0c;点击Support提交&#xff0c;会自动跳转一个邮件&#xff0c;发送到WhatsApp官方&#xff0c;我满心欢喜地等待解封&#xff0c;以为会像大家说的那样&#xff0c;第二天可以解封。 就是点击那个 支持 提交了…

微信网页版解封方法

最近&#xff0c;微信又推出了网页版的【文件传输助手】&#xff0c;也就是说&#xff0c;无需登录客户端的微信&#xff0c;即可进行文件或图片的传输。 网址是 https://filehelper.weixin.qq.com网址巨长&#xff0c;咋一看&#xff0c;又长又难记&#xff0c;玩个锤子 经…

微信小程序-获取用户头像信息以及修改用户头像

这里主要用到button的open-type功能&#xff0c;官网已有说明&#xff1a; 给button设置open-type"chooseAvatar"&#xff0c;来使bindchooseavatar方法生效&#xff0c;在bindchooseavatar指定的函数中获取用户的头像信息 <button open-type"chooseAvata…

小程序中新版本的获取用户头像与昵称:bind:chooseavatar

前言&#xff1a; 自从微信官方把获取用户昵称与头像的功能改动以后&#xff0c;给我们开发和用户的操作又增加了很多负担&#xff0c;但是没办法&#xff0c;只能使用最新的使用方法了。 小程序用户头像昵称获取规则调整公告 新版实现效果&#xff1a; 注意&#xff0c;真机…

关于QQ群头像以及微信讨论组头像的工具类

QQ群头像以及微信讨论组头像工具类介绍 介绍&#xff1a; 由于段时间公司项目需求&#xff0c;在翻了网上很多代码后发现&#xff0c;很多人用的是自定义View的办法来实现此类头像的效果&#xff0c;但是&#xff0c;这样一来就必须改变项目中原有的控件&#xff0c;而且当需要…