Leetcode 139. 单词拆分

  • 1、问题分析
  • 2、问题解决
  • 3、总结

1、问题分析

题目链接:https://leetcode-cn.com/problems/word-break/
  本质上就是一个深搜问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。

2、问题解决

  笔者以C++方式解决。

#include "iostream"using namespace std;#include "algorithm"
#include "vector"
#include "queue"
#include "set"
#include "map"
#include "string"
#include "stack"class Solution {private:// 记录字符串是否访问过set<string> setKeysChen;
public:bool wordBreak(string s, vector<string> &wordDict) {// 判断字符串 s 是否 可以被字典 wordDict 中的字符拆分return dfs(s, wordDict);}/*** 判断字符串 s 是否 可以被字典 wordDict 中的字符拆分* @param s* @param wordDict* @return*/bool dfs(string s, vector<string> &wordDict) {// 字符串 为空,到达递归边界,返回 truestring temp = s;if (temp.empty()) {return true;}// 由于 set 是有序集和,直接查找即可// 如果该字符串已经计算过,直接返回 false// 因为计算成功的直接就走了auto iterator1 = setKeysChen.find(temp);if (iterator1 != setKeysChen.end()) {return false;}// 遍历 wordDict 数组for (int i = 0; i < wordDict.size(); ++i) {// 在字符串中查找是否有 wordDict 数组中的字符串auto pos_index = temp.find(wordDict[i]);// 如果找到了if (pos_index != string::npos) {// 这里只替换最前面和最后面的字符串if (pos_index == 0 ||pos_index + wordDict[i].length() == temp.length()) {// 用查找到的 wordDict 数组中的字符串 拆分 给定的单词temp.replace(pos_index, wordDict[i].length(), "");// 拆完后继续深搜bool b = dfs(temp, wordDict);// 如果深搜成功,那就返回 trueif (b) {return true;} else {// 否则的话将值保存在 set 集和中setKeysChen.insert(temp);// 复原temp = s;}}}}return false;}};int main() {string s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab";vector<string> wordDict = {"a", "aa", "aaa", "aaaa", "aaaaa", "aaaaaa", "aaaaaaa", "aaaaaaaa", "aaaaaaaaa","aaaaaaaaaa"};Solution *pSolution = new Solution;bool b = pSolution->wordBreak(s, wordDict);cout << b << endl;system("pause");return 0;
}

运行结果

有点菜,有时间再优化一下。

3、总结

  难得有时间刷一波LeetCode, 这次做一个系统的记录,等以后复习的时候可以有章可循,同时也期待各位读者给出的建议。算法真的是一个照妖镜,原来感觉自己也还行吧,但是算法分分钟教你做人。前人栽树,后人乘凉。在学习算法的过程中,看了前辈的成果,受益匪浅。
感谢各位前辈的辛勤付出,让我们少走了很多的弯路!
哪怕只有一个人从我的博客受益,我也知足了。
点个赞再走呗!欢迎留言哦!

Leetcode 139. 单词拆分相关推荐

  1. leetcode - 139. 单词拆分

    139. 单词拆分 -------------------------------------------- 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以 ...

  2. LeetCode 139. 单词拆分(DP)

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

  3. LeetCode 139. 单词拆分(动态规划)

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

  4. [leetcode]139. 单词拆分

    1.递归+备忘录 class Solution {string s;vector<string> wordDict;unordered_set<string>m_set;vec ...

  5. 101. Leetcode 139. 单词拆分 (动态规划-完全背包)

    步骤一.确定状态: 确定dp数组及下标含义 dp[j]表示的是长度为j的字符串(容量为j的背包)能否被拆分成1个或者多个单词 里面的值, 所以这里的dp[j]非1即0 步骤二.推断状态方程: if d ...

  6. LeetCode 140. 单词拆分 II(DP+回溯)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...

  7. 139. 单词拆分 ——【Leetcode每日一题】

    139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典.请你判断是否可以利用字典中出现的单词拼接出 s . 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重 ...

  8. 代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分

    day46 139.单词拆分 1.确定dp数组以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字 ...

  9. 代码随想录算法训练营第五十天|动态规划:139.单词拆分、多重背包理论基础、背包问题总结

    [139.单词拆分] 这个题目是一个背包问题.但是他稍微有点不太一样.在于这题判断能否装满背包是在判断单词是否出现在字典中,如果出现,就代表能装满. 背包是长度为i的字符串 物品是长度为i-j的子串 ...

最新文章

  1. img 在video上面_HTML,img,video无法铺满屏幕解决方法,同视频做网页背景无法全屏的解决方法...
  2. Java多线程闲聊(三):RxJava
  3. 开源项目使用经验原则
  4. 本地存储之sessionStorage
  5. java交换数组元素_交换数组中的元素(Java)
  6. java struct 简单案列_spring与struts简单整合案例
  7. STP RSTP MSTP PVST+学习 (1)
  8. Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925
  9. 【转】 Apache分析脚本
  10. Python入门经典题斐波那契数列
  11. openGauss企业级开源数据库获第十届中国电子信息博览会金奖
  12. Windows下VS2015编译caffe(CPU ONLY)
  13. 相关性和差异的显著性
  14. android 可以iphone,[实测]哪些Android手机充电器也可以给iPhone 12快充?
  15. 启发式算法(通俗解释)
  16. 360浏览器下载文件成功但文件异常问题
  17. 了解C语言中的pipe()系统调用
  18. 【区块链论文阅读】A Weak Consensus Algorithm and Its Applic
  19. 悦刻打假再添战果 协助深圳警方捣毁华强北一售假窝点
  20. 从事大数据征信行业,你必须知道这些

热门文章

  1. js-js数据结构和算法-树
  2. jmeter-简单接口测试
  3. camera中文版软件 ip_网络摄像机监控(IP Camera Viewer Pro)
  4. 快速生成快递柜唯一取件码
  5. matlab求解数学题,Matlab求解数学问题
  6. mysql索引长度超过767bytes问题解决。Specified key was too long; max key length is 767 bytes
  7. LC激光雷达qy调研
  8. 国外注册域名和国内注册有什么不同?
  9. 《初生牛犊的启航之旅》
  10. 制作一个GUI仪表盘,安排!LVGL『Gauge仪表盘控件』介绍