leetcode 139. Word Break

news2025/4/19 15:55:05

这道题用动态规划解决。

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet;
        for(string& word:wordDict){
            wordSet.insert(word);
        }
        int s_len = s.size();
        //s的下标从1开始起算,dp[j]表示s[1,j]能拆分成wordDict的组合
        vector<bool> dp(s_len+1,false);
        dp[0] = true;//表示空串

        for(int len = 1;len <= s_len;len++){//对s[1,len]遍历
            for(int i = 0;i < len;i++){//对s[1,len]的拆分点遍历
                if(dp[i] && wordSet.find(s.substr(i,len-i)) != wordSet.end()){
                    dp[len] = true;
                    break;
                }
            }
        }
        return dp[s_len];
    }
};

可以事先确定,wordDict中最长的单词的长度max_word_len。这样在考虑s.sub(i,len-i)时候,如果len-i大于max_word_len就可以直接跳过这种情况。

优化后的代码:

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet;
        int max_word_len = 0;
        for(string& word:wordDict){
            wordSet.insert(word);
            if(word.size() > max_word_len) max_word_len = word.size();
        }
        int s_len = s.size();
        //s的下标从1开始起算,dp[j]表示s[1,j]能拆分成wordDict的组合
        vector<bool> dp(s_len+1,false);
        dp[0] = true;//表示空串

        for(int len = 1;len <= s_len;len++){//对s[1,len]遍历
            for(int i = 0;i < len;i++){//对s[1,len]的拆分点遍历
                if(len -i > max_word_len)
                    continue;
                if(dp[i] && wordSet.find(s.substr(i,len-i)) != wordSet.end()){
                    dp[len] = true;
                    break;
                }
            }
        }
        return dp[s_len];
    }
};

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

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

相关文章

Leetcode刷题 由浅入深之哈希表——242. 有效的字母异位词

目录 &#xff08;一&#xff09;字母异位词的C实现 写法一&#xff08;辅助数组&#xff09; &#xff08;二&#xff09;复杂度分析 时间复杂度 空间复杂度 &#xff08;三&#xff09;总结 【题目链接】242.有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; …

自动化构建工具:makemakefile

在Windows中&#xff0c;我们写C代码或者C代码都需要用先找到一款合适的编译器&#xff0c;用来方便我们更好的完成代码&#xff0c;比如说vs2019&#xff0c;这些工具的特点是集成了多种开发所需的功能&#xff0c;如代码编辑、编译、调试、版本控制等&#xff0c;无需在不同的…

刷题 | 牛客 - js中等10题(更ing)1/54知识点解答

知识点汇总&#xff1a; Array.from(要转换的对象, [mapFn], [thisArg ])&#xff1a;将类数组对象&#xff08;Array-like&#xff09;/可迭代对象&#xff08;Iterable&#xff09;转为真正的数组。 第二参 mapFn 是 类似 Array.prototype.map 的回调函数&#xff0c;加工…

Ubuntu 20.04.6编译安装COMFAST CF-AX90无线网卡驱动

目录 0 前言 1 CF-AX90无线网卡驱动 1.1 驱动下载 1.2 驱动准备 2 编译安装驱动 2.1 拷贝驱动依赖到系统 2.2 驱动安装编译 3 重启 0 前言 COMFAST CF-AX90或者说AIC8800D80的Linux版本驱动不支持高版本的linux内核&#xff0c;实测目前仅支持最高5.15的内核。Ubuntu2…

PPT无法编辑怎么办?原因及解决方法全解析

在日常办公中&#xff0c;我们经常会遇到需要编辑PPT的情况。然而&#xff0c;有时我们会发现PPT文件无法编辑&#xff0c;这可能由多种原因引起。今天我们来看看PPT无法编辑的几种常见原因&#xff0c;并提供实用的解决方法&#xff0c;帮助你轻松应对。 原因1&#xff1a;文…

安全用电基础知识及隐患排查重点

安全用电是电气安全的一个重要方面&#xff0c;作为普通人员&#xff0c;必须学会基础的用电知识和技巧&#xff0c;才能保障自己和家庭的安全。 以下是安全用电的基础知识及隐患排查重点&#xff1a; 一、基础知识 1.电压&#xff1a;单位为伏特&#xff08;V&#xff09;&a…

Laravel 使用通义灵码 - AI 辅助开发提升效率

一、引言 Laravel 是 PHP 常用的一种后端开发框架&#xff0c;遵循 MVC&#xff08;模型 - 视图 - 控制器&#xff09;架构&#xff0c;以简洁、优雅的语法和强大的功能著称&#xff0c;旨在提升开发效率并简化复杂任务的实现。然而&#xff0c;它的开发习惯可能与传统的 PHP …

签到功能---实现签到接口

文章目录 概要整体架构流程技术细节小结 概要 需求分析以及接口设计 由KEY的结构可知&#xff0c;要签到&#xff0c;就必须知道是谁在哪一天签到&#xff0c;也就是两个信息&#xff1a; 当前用户 当前时间 这两个信息我们都可以自己获取&#xff0c;因此签到时&#xff…

LWIP_MQTT连接ONENET

前言&#xff1a; 使用正点原子STM32F407, LWIP,MQTT demo,验证LwIP的MQTT连接ONENET物联网平台,测试整个链路是否畅通&#xff0c;后面再详细分析LWIP移植和MQTT协议的使用。 26 基于 MQTT 协议连接 OneNET 服务器 本章主要介绍 lwIP 如何通过 MQTT 协议将设备连接到 OneNET…

代码随想录刷题|Day20(组合总数,组合总数2、分割回文串)

回溯算法 Part02 组合总数 力扣题目链接 代码随想录链接 视频讲解 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你…

ArcGIS Desktop使用入门(四)——9版本与10版本区别

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

R语言之环境清理

有时候 R 环境中残留的变量可能会导致警告&#xff0c;可以尝试清理工作空间并重新加载数据。 警告信息: In mget(objectNames, envir ns, inherits TRUE) : 重新评估被中断的许诺 # 观察前6行 head(iris)# 观察数据结构 str(iris)# 探知数据的极值和分位数&#xff0c;以及…

javaSE————网络编程套接字

网络编程套接字~~~~~ 好久没更新啦&#xff0c;蓝桥杯爆掉了&#xff0c;从今天开始爆更嗷&#xff1b; 1&#xff0c;网络编程基础 为啥要有网络编程呢&#xff0c;我们进行网络通信就是为了获取丰富的网络资源&#xff0c;说实话真的很神奇&#xff0c;想想我们躺在床上&a…

FreeRTOS二值信号量详解与实战教程

FreeRTOS二值信号量详解与实战教程 &#x1f4da; 作者推荐&#xff1a;想系统学习FreeRTOS嵌入式开发&#xff1f;请访问我的FreeRTOS开源学习库&#xff0c;内含从入门到精通的完整教程和实例代码&#xff01; 1. 二值信号量核心概念解析 二值信号量(Binary Semaphore)是Fre…

赛灵思 XCVU440-2FLGA2892E XilinxFPGA Virtex UltraScale

XCVU440-2FLGA2892E 属于 Xilinx Virtex UltraScale 系列&#xff0c;是面向高端应用的旗舰 FPGA 器件。该系列产品以出色的高并行处理能力、丰富的逻辑资源和高速互联能力闻名&#xff0c;广泛用于 高性能计算、数字信号处理等对计算能力和带宽要求极高的场景。采用先进的 20n…

Spring Cloud Alibaba微服务-微服务介绍和搭建

1. 课程介绍 单体服务中有订单&#xff0c;用户&#xff0c;库存&#xff0c; 两个缺陷&#xff1a; a. 是以应用的维度进行负载均衡&#xff0c;资源占用大 b. 当其中一个模块宕机&#xff0c;整个应用就不能用了&#xff1b; nacos&#xff1b;ribbon&#xff0c;loadBa…

KALI安装JAVA8和切换JDK版本

一、安装JDK1.8 1、直接使用下面的地址下载java 1.8&#xff1a; https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz 2、建立目录&#xff0c;将下载的jdk的安装包复制过去并进行解压 sudo mkdir -p /usr/local/java cp jdk-8u202-linux-x64.t…

今日行情明日机会——20250417

指数目前在区间内缩量震荡 2025年4月17日涨停主要行业方向分析 一、核心主线方向 化工&#xff08;产能优化涨价预期&#xff09; • 涨停家数&#xff1a;11家&#xff08;最强方向&#xff09;。 • 代表标的&#xff1a; ◦ 红宝丽&#xff08;2连板&#xff09;&#xff…

一篇讲完自动化测试基础-Python【万字详细讲解】12

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

极限编程(XP)简介及其价值观与最佳实践

目录 一、什么是极限编程&#xff08;XP&#xff09;二、极限编程的核心价值观1. 沟通2. 简单3. 反馈4. 勇气 三、极限编程的12个最佳实践1. 结对编程2. 40小时工作制3. 简单设计4. 代码规范5. 测试驱动开发&#xff08;TDD&#xff09;6. 系统隐喻7. 持续集成8. 重构9. 客户在…