leetcode-139. 单词拆分(记忆化搜索|动态规划)

leetcode-139. 单词拆分(记忆化搜索|动态规划)给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordDict = [

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 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
  1. 记忆化搜索

class Solution { 
   
public:
    set<string>m;
    bool wordBreak(string s, vector<string>& wordDict) { 
   
        if(s == "")return true;
        if(m.find(s) != m.end())return false;
        for(auto &a : wordDict){ 
   
            int len = a.size();
            if(s.size() >= len){ 
   
                string t = s.substr(0,len);
                if(t == a && wordBreak(s.substr(len),wordDict))return true;
            }
        }
        m.insert(s);
        return false;
    }
};
  1. 动态规划
const int N = 1e5 + 10;

class Solution { 
   
public:
    bool wordBreak(string s, vector<string>& wordDict) { 
   
        int n = s.size();
        bool f[N] = { 
   false};
        f[0] = true;
        for(int i = 1;i <= n;i ++){ 
   
            for(auto &w : wordDict){ 
   
                int l = i - w.size();
                int len = w.size();
                if(l >= 0 && w == s.substr(l,len)){ 
   
                    f[i] = f[i] | f[l];
                }
            }
        }
        return f[n];
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168555.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月9日 下午4:00
下一篇 2022年8月9日 下午4:00


相关推荐

  • 激光SLAM算法学习(三)——3D激光SLAM

    激光SLAM算法学习(三)——3D激光SLAM3D激光SLAM1、3D激光SLAM的介绍3D激光SLAM的输入:IMU数据3D激光雷达数据里程计数据3D激光SLAM的输出:3D点云地图机器人的轨迹orPoseGraph2、3D激光SLAM的发展3D激光SLAM的帧间匹配方法——点云配准算法Point-to-PlaneICPFeature-basedMethod3D激光SLAM的回环检测方法Scan-to…

    2022年8月23日
    8
  • Java学习之final与匿名内部类篇

    Java学习之final与匿名内部类0x00前言续上几篇文章,得知子类继承父类后是可以在父类的基础上进行改写的,那么在程序中有些东西可能是不能让我们给轻易给改动的,那么Java给提供了final

    2021年12月11日
    59
  • java的实例变量_JAVA语言中的实例变量

    java的实例变量_JAVA语言中的实例变量JAVA 语言中的实例变量一个 Java 程序可以认为是一系列对象的集合 而这些对象通过调用彼此的方法来协同工作 下面是 JAVA 语言实例变量的介绍 欢迎参考 每个对象都有独特的实例变量 对象的状态由这些实例变量的值决定 java 第一个程序实例 publicclassH publicstatic String args System out print

    2025年11月10日
    4
  • 全球NB-IoT发展面临六大挑战

    全球NB-IoT发展面临六大挑战

    2022年3月4日
    39
  • c++ 实现键盘钩子

    c++ 实现键盘钩子一.总体概述  主要实现的是将windows活跃或是顶层窗口的键盘输入的记录下来储存在txt文件中。主要用到的知识windows操作系统的消息机制,动态库等一些知识二.具体的实现  首先我们要重新建立一个windows桌面应用程序,然后我们运行一下我们会看到一个窗口,我们创建桌面应用程序而不创建控制台程序是因为桌面应用程序,这里面最主要的原因控制应用程序模拟DOS系统的那种CUI操作,…

    2022年5月24日
    42
  • 服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作…

    服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作…有时候我们在删除一些系统重要文件,或者被保护的文件的时候,会出现对话框,提示我们您需要来自administrator权限才能对此文件夹进行更改,这是什么原因导致的?今天小编就为大家分析下解决办法。方法/步骤1、右键点击提示我们需要权限的文件夹,然后点击【属性】选项。2、进入文件夹属性界面在上方菜单栏处,找到【安全】选项,然后点击下方的高级选项。3、进入高级选项,点击上方【所有者】,然后点击下方的编…

    2025年7月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号