当前位置: 首页 > news >正文

代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分

  • 类似于回溯算法中的拆分回文串
  • 题目是要求拆分字符串,问这些字符串是否出现在字典里。但这道题可以反着来考虑,从字典中的单词能不能组成所给定的字符串
    • 如果这样考虑, 这个字符串就背包,容器
    • 字典中的单词就是一个一个物品
    • 问题就转化成这些物品能不能正好装满这个背包,而且这些物品可以使用多次
    • 因此这是一个完全背包类问题
  • 动规五部曲
    • dp[j]数组含义:把题目给定的字符串能不能用字典字符串来添满。字符串长度为j时,能被字典字符串来组成,就返回true,否则为false
    • 递推公式:道德字符串中[i, j]内容正好字典中,而且dp[i]也为true的话,dp[j]也就是true
    • 初始化值:dp[0]必须为true,否则递推出来的内容都会是false
      • 非0下标都要初始化为false
    • 遍历顺序:给定字符串的内容是确定的,也就是说字典中内容是一种排列效果来生成字符串,而不是组合出多种效果来组成字符串(也根本组不成)
      • 所以要先遍历背包,再遍历物品
class Solution {
public:bool wordBreak(std::string s, std::vector<std::string>& wordDict) {std::unordered_set<std::string> wordSet(wordDict.begin(), wordDict.end());std::vector<bool> dp(s.size() + 1, false);dp[0] = true;for (int i = 1; i <= s.size(); ++i) {for (int j = 0; j < i; ++j) {std::string word = s.substr(j, i - j);if (wordSet.find(word) != wordSet.end() && dp[j])dp[i] = true;}}return dp.at(s.size());}
};
  • 汇总
http://www.lryc.cn/news/528827.html

相关文章:

  • ML基础-Jupyter notebook中的魔法命令
  • Zookeeper入门部署(单点与集群)
  • Kafa分区策略实现
  • Pyside/Pyqt中QWebEngineView和QWebEnginePage的区别
  • Kafka的内部通信协议
  • 强大到工业层面的软件
  • 数据分析和AI丨应对AI实施挑战,工程领域AI应用的五大方法
  • 54. UDP协议
  • AJAX笔记入门篇
  • 深入解析Java集合框架:春招面试要点
  • 【Elasticsearch】Elasticsearch的查询
  • STM32 PWM驱动直流电机
  • 系统思考—心智模式
  • JavaScript_02 表单
  • 【Qt】06-对话框
  • AI学习指南Ollama篇-使用Ollama构建自己的私有化知识库
  • 2.策略模式(Strategy)
  • Python里的小整数问题挺有意思的
  • 开源智慧园区管理系统对比五款主流产品探索智能运营新模式
  • 正则表达式入门
  • hive:数据导入,数据导出,加载数据到Hive,复制表结构
  • 【某大厂一面】HashSet底层怎么实现的
  • 动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
  • 免杀国内主流杀软的恶意样本分析
  • 第4章 基于中点电流的NPC逆变器中点电压平衡策略
  • 消息队列篇--通信协议篇--应用层协议和传输层协议理解
  • FLTK - FLTK1.4.1 - demo - animgifimage
  • 目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek
  • 1.2 基于深度学习的底层视觉技术
  • HTML 标题