Word Break

原题链接Word Break

给定一个字符串和单词字典,将字符串切分成若干个单词,使每个单词都在字典中。判断是否可以成功切分

假设字符串s[0 : n-1]可以成功切分成若干个单词,那么一定存在一个i使得s[0 : i-1]可以成功切分成若干个单词,同时s[i : n-1]在字典中存在,可以采用动态规划的思想求解

令dp[i]表示s[0 : i-1]是否可以成功切分成若干单词组合,最终要求解的是dp[n]。

那么每求一个dp[i]使,就在i前面寻找是否存在一个j使得dp[j]为真且s[j : i-1]在字典中

代码如下

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> hash;size_t maxLen = 0;for(auto& word : wordDict){hash.insert(word);maxLen = std::max(maxLen, word.size());}vector<int> dp(s.size() + 1, 0);dp[0] = 1;for(int i = 1; i <= s.size(); ++i){for(int j = i - 1; j >= 0 && (i - j) <= maxLen; --j){/* 寻找一个j使得s[0 : j-1]可以拆分 */if(dp[j]){/* 判断s[j : i-1]是否在字典中 */string word = s.substr(j, i - j);if(hash.find(word) != hash.end()){/* 标记s[0 : i-1]可以成功拆分 */dp[i] = 1;break;}}}}return dp[s.size()];}
};

Word Break II

原题链接Word Break II

寻找所有的拆分结果

还是采用上述的思路,要将s[0 : n-1]拆分,那么就从后向前寻找i使得s[i : n-1]在字典中,然后拆分s[0 : i-1],将结果进行组合

代码如下

class Solution {
public:vector<string> wordBreak(string s, vector<string>& wordDict) {unordered_set<string> hash;for(auto& word : wordDict)hash.insert(word);return breakWord(s, hash);}
private:vector<string> breakWord(string& s, unordered_set<string>& hash){/* 防止重复计算 */if(m.find(s) != m.end())return m[s];vector<string> res;for(int i = s.size() - 1; i >= 0; --i){string word = s.substr(i);if(hash.find(word) != hash.end()){string str = s.substr(0, i);vector<string> prevWords = breakWord(str, hash);for(auto& words : prevWords)res.emplace_back(words + " " + word);if(i == 0)res.emplace_back(word);}}m[s] = res;return res;}
private:unordered_map<string, vector<string>> m;
};

每天一道LeetCode-----将字符串切分成若干单词,使得每个单词都在给定的字典中,求出所有的切分结果相关推荐

  1. Android kotlin 将Base64字符串转换成Bitmap,并在jetpack compose的Image控件中显示

    Android kotlin 将Base64字符串转换成Bitmap 前言 代码 将Base64字符串转换成Bitmap 在jetpack compose的Image控件中显示Bitmap 完事 前言 ...

  2. 集合切分:List集合按照数量切分成若干个集合

    根据数值对集合切分 /*** 将集合按指定数量分组** @param list 数据集合* @param quantity 分组数量* @return 分组结果*/public static < ...

  3. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  4. ⭐算法入门⭐《模拟》中等01 —— LeetCode 8. 字符串转换整数

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   实现一个myAtoi( ...

  5. leetcode 8. 字符串转换整数 (atoi)

    难度:中等 频次:75 题目: 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(s ...

  6. Leetcode 8. 字符串转换整数 (atoi) (每日一题 20210615)

    请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数).函数 myAtoi(string s) 的算法如下:读入 ...

  7. php字符串转二进制数组中,如何将php字符串转成二进制

    如何将php字符串转成二进制 发布时间:2020-07-28 09:21:55 来源:亿速云 阅读:117 作者:Leah 今天就跟大家聊聊有关如何将php字符串转成二进制,可能很多人都不太了解,为了 ...

  8. JS字符串转换成数字的三种经典方法和代码实例

    1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行: 对其他类 ...

  9. 找出一个字符串中出现次数最多的字_海量数据中找出前k大数(topk问题)

    在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题. 针对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆(就是上面提到 ...

最新文章

  1. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)
  2. rⅰd的意思_Q345R(HIC)和Q345R(R-HIC)化学成分抗氢板
  3. Spring MVC POJO传参方式
  4. 基于libmad的MP3解码播放器
  5. Boring Homework 二叉搜索树的打印,模拟
  6. abstract类_【Java】类的结构 - Nemo
  7. IDEA中使用Maven
  8. junit单体测试(PowerMockito)一
  9. mysql8和php7不能连接_php无法连接mysql8.x
  10. 存储过程,游标和触发器实例
  11. 【Spring 工厂】注入详解 — Set注入(JDK内置类型,用户自定义类型)、构造注入(重载)
  12. 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
  13. NPM私有服务器搭建方法——sinopia
  14. linux配置ip地址 suse_suse下设置IP的两种方法
  15. winform DataGridView.Refresh()不及时更新,设计线程
  16. 简单的C语言程序介绍(重点理解),超详细基础代码解析
  17. HAL库控制PS2手柄
  18. JavaScript 运行机制(EventLoop)详解:一篇文章全部搞懂事件循环
  19. 计算机word表格计算教程F9,word表格计算方法详解
  20. 华为核心交换如何配置源地址转换_华为路由器和交换机配置地址转换

热门文章

  1. linux cache 内核参数,Linux内核中drop_caches参数
  2. vue 动态添加class_前端开发:Vue项目实战-Music
  3. oracle 脚本命令集合,Oracle命令行模式,批量执行SQL脚本
  4. 任意长度的两个大数的乘法
  5. Python第三方模块tesserocr安装
  6. Docker ASP.NET Core (5):Docker Compose
  7. AtCoder Grand Contest 008: Contiguous Repainting(思维)
  8. java中日期与字符串之间的转换
  9. 关于ESXI能虚拟出多少个虚拟机和CPU的关系
  10. JSON Web Tokens(JWT)