LeetCode 139. Word Break

qt实现OCC读取STEP模型并显示(附完整源码) 阅读详情

Given a string s and a dictionary of words dict, determine ifs can be segmented into a space-separated sequence of one or more dictionary words.

For example, given
s = "leetcode",
dict = ["leet", "code"].

Return true because "leetcode" can be segmented as "leet code".



I made a mistake about backtracking the string. My first version was as follows:

bool wordBreak(string s, int pos, unordered_set<string>& wordDict) {
    if(pos >= s.size()) {return true;}
    for(int i = pos + 1; i <= s.size(); ++i) {
        string tmp = s.substr(pos, i - pos);
        if(wordDict.find(tmp) != wordDict.end()) {
            wordBreak(s, i, wordDict);
        }
    }
}
Actually this is not correct. Suppose the wordDict is "leet" "code". The string s : leetcode.

the first loop will match, leet; then pushed onto stack. The recursion for will go to "code". This should return true. But since this is recursion, it will go back to the first loop again, then return false. String recursion should set a flag. Once the flag went to true, it should always just return without  changing the flag anymore.

The time complexity is pow(2, n). T = T(n-1) + T(n-2) ... + 1

#include <string>
#include <unordered_set>
#include <iostream>
#include <vector>
using namespace std;

//Recursion
void wordBreak(string s, int pos, unordered_set<string>& wordDict, bool& found) {
    if(found) return;
    if(pos >= s.size()) {found = true; return;}
    for(int i = pos + 1; i <= s.size(); ++i) {
        string tmp = s.substr(pos, i - pos);
        if(wordDict.find(tmp) != wordDict.end()) {
            wordBreak(s, i, wordDict, found);
        }
    }
 }

// DP method
bool wordBreakII(string s, unordered_set<string>& wordDict) {
    if(s.size() == 0) return true;
    vector<int> dp(s.size(), 0);
    for(int i = 0; i < s.size(); ++i) {
        for(int j = 0; j <= i; ++j) {
            if((!j || dp[j-1]) && (wordDict.find(s.substr(j, i - j + 1)) != wordDict.end())) {
                dp[i] = 1;
                break;
            }
        }
    }
    return dp[s.size() - 1];
}

bool wordBreak(string s, unordered_set<string>& wordDict) {
    int pos = 0;
    bool found = false;
    wordBreak(s, pos, wordDict, found);
    if(found) return true;
}

int main(void) {
    unordered_set<string> wordDict;
    wordDict.insert("aaaa");
    wordDict.insert("aaa");
    cout << wordBreakII("aaaaaaa", wordDict) << endl;
}
~


02-Redis 核心特性与数据结构详解:揭秘高性能的技术内核 本文深度拆解 Redis 高性能的技术内核:揭秘其凭“内存存储 + C 语言开发” 实现微秒级延迟、10 万 + QPS 的性能优势;详解 5 种基础数据类型(String/Hash 等)与 4 种扩展数据类型(Stream/Geospatial 等)的特性及场景;还介绍多语言支持、RDB/AOF 持久化、主从复制 / 哨兵 / 集群等高可用方案,助读者掌握 Redis 技术核心与实践逻辑。 阅读详情

相关推荐

NXP应用随记(八):S32K3XX的HSE学习记录(HSE\MU\UTEST\IVT\A,B SWAP)

HSE,即硬件安全引擎(Hardware Security Engine),是NXP S32K312微控制器(MCU)中的一个功能,它提供了一系列的安全特性,包括加密、安全启动和密钥存储等。这些功能旨在增强汽车电子系统的信息安全,符合ISO26262标准,达到ASIL D安全等级。具体来说,S32K312的HSE支持AES-128/192/256加密、RSA、ECC等加密算法,以及侧通道保护,确保了数据传输和存储的安全性。

梦想技术家 9740

LeetCode第 139 题:单词拆分(C++)

139. 单词拆分 - 力扣(LeetCode) 动态规划 注意拆分时可以重复使用字典中的单词 首先考虑状态和选择,注意题目的问法:判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。所以只要能用字典中的单词把字符串拼出来就可以了,不限制使用字典中的多少个单词,也不限制每个单词使用的次数,只要能拼出来就行。 所以状态就是一个:当前的子串[0-i]能不能被拼出来。至于选择,所有单词表中的单词没有任何限选条件,所以可以不考虑选择。 然后定义状态dp[i]表示s的子串[0, i]能不能被单词表拼出来 再然

zj 1704

路由工具之策略路由policy-based-routing、MQC三板斧流分类、流行为、流策略

PBR(Policy-Based Routing,策略路由)策略路由可理解为控制路由,因为PBR策略的优先级高于传统路由表的转发,所以它主要用于影响数据包转发的技术。

Hades_Ling的优快云博客 5579

LeetCode 139. 单词拆分(动态规划,DFS和BFS解决)

截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码:6666 public boolean wordBreak(String s, List<String> dict) { boolean[] dp = new boolean[s.length() + 1]; for (i.

数据结构和算法 2010

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

比NTP还牛逼的时间同步协议:1588v2,亚微秒级!

1588v2,又称为Precision Time Protocol Version 2,即精密时间协议的第二版本,或称为PTPv2,是一种精密时间同步协议标准,旨在实现网络中设备之间的高精度时间同步。该协议由IEEE标准组织发布,并在网络测量和控制系统中得到广泛应用。1588v2的主要目的是在计算机网络中提供高度准确的时间同步。它可用于确保不同设备之间的时钟同步,从而协调它们的操作。这对于需要协同工作的系统、无线通信基站等具有关键性的应用非常重要。

网络技术联盟站 4277

LeetCode139.单词接龙 完全背包的组合与排列问题

完全背包的排列

Hanknet的博客 215

深入剖析 YOLOv11 中的 C2PSA 注意力机制

YOLOv11中的C2PSA注意力机制在目标检测领域取得突破性进展。该机制通过跨通道分组交互和轻量级位置编码,在仅增加0.6%计算量的情况下提升mAP 1.5-2.3个百分点。C2PSA创新性地结合局部跨通道交互、位置编码和双分支并行调制,采用纯卷积实现自注意力,避免传统注意力机制的高计算复杂度。实验表明,C2PSA在COCO数据集上以微小计算代价显著提升检测性能,特别是对小目标和遮挡目标效果突出。该模块可直接嵌入YOLO架构,为轻量级目标检测提供新的优化方向。

shrgegrb的博客 3396

动态规划:leetcode 139.单词拆分、多重背包问题

c++ leetcode 动态规划

qq_52097561的博客 524

2025华为OD面试手撕代码真题目录及面试八股文

本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备

KJ.JK 5万+

现代软件开发技术 | 第1章:Spring基础

Spring是一个轻量级Java 开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。

知识库搭建ing 454

Leetcode - 139双周赛

leetcode - 139双周赛,主要知识点:djstra/bfs,刷表法,排序 + 二分贪心

m0_74859835的博客 757

Kafka 入门篇(一)

初识 Kafka 什么是 Kafka Kafka 的基本术语 Kafka 的特性(设计原则) Kafka 的使用场景 Kafka 的消息队列 点对点模式的消息队列 发布-订阅模式的消息队列 Kafka 系统架构 核心 API Kafka 为何如此之快 broker 端配置 broker.id port zookeeper.connect log.dirs num.recovery.threads.per.data.dir auto.create.topics.enable topic默认配置 num.par

1231

LeetCode(139)Word Break

题目如下: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all such possible sentences. For example, given s

BUILD 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Leetcode139. Word Break

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。

magic_jiayu的博客 260

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LeetCode139. Word Break

分析 难度 中 来源 https://leetcode.com/problems/word-break/ 思路 题目 Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separ...

ov流岚vo的专栏 242

leetcode题解:第139题Word Break

https://leetcode-cn.com/problems/word-break/ 文章目录解法一、回溯代码解法二、动态规划代码复杂度分析 解法一、回溯 依照惯例,没有好的思路的时候,就先想想暴力解法怎么做。暴力解法无非是逐个单词地拆分字符串,每次选的单词可以重复。要实现暴力解法的话,肯定就是用回溯,因为回溯算法“撤销选择”的特点,保证了每次都能考虑到所有的单词。 简而言之,对于字符串s和单词word,word长度为n,当word与s[:n]相同时,就可以把word选来进行一次拆分,紧接着继续判断s[

chenf1999的博客 541

LeetCode 139. Word Break 题解

本题是动态规划的经典应用问题,主要考察对动态规划思想的理解和使用。通过使用动态规划,我们可以高效地判断是否可以利用字典中出现的单词拼接出给定的字符串。动态规划的核心思想是:定义一个数组dp,其中dp[i]表示字符串s的前i个字符是否可以被字典中的单词拼接而成,然后遍历每个位置,更新dp数组。这种方法不仅适用于单词拆分问题,还可以应用于许多其他类似的问题。掌握动态规划的思想,对于解决这类问题非常重要。

cannonjinx的博客 3590

Leetcode 139. Word Break (Medium) (cpp)

Leetcode 139. Word Break (Medium) (cpp)

还是需要多学习!闷声大发财,这是坠吼的! 529

Leetcode139题Word Break的两种动态规划解法

由leetcode139题Word Break产生的对动态规划的一点思考。 题目要求是这样的: Given a string s and a dictionary of words dict,determine if s can be segmented into a space-separatedsequence of one or more dictionary words. For e

hgqqtql的专栏 1922

Leetcode 139 Word Break

题目 Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words. Note: The same word in the dictionary may be reused multiple time

weixin_43796689的博客 158

[leetcode] 139. Word Break

Description Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words. ...

Learning from the mistakes 219

【leetcode】139. Word Break

题目: 思路: 动态规划。用二维数组dp[i][j]保存s[i~j]是否在wordDict。然后用递归的方式进行DFS深度优先遍历,将所有可能的组合都尝试一遍。但是超时了,结果为29 / 36 test cases passed。 然后学习了https://www.cnblogs.com/reboot329/p/6168346.html之后,发现用一维数组dp(数组大小与字符串长度相同)就可以...

zxc120389574的博客 293

Leetcode 139. Word Break (python+cpp)

Leetcode 129 Word Break题目解法1:recursion (TLE)解法2:recursion + memorization解法3:动态规划 题目 解法1:recursion (TLE) 最直观的解法就是用recursion将string不断分成小的部分,但是这样的方法会超时,代码如下: class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: # recurrsio

qq_37821701的博客 732
上一篇: LeetCode 222. Count Complete Tree Nodes
下一篇: LeetCode 225. Implement Stack using Queues
ActiveCoder
博客等级 码龄11年 4粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值