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

leetcode-139. 单词拆分-C

暴力回溯

回溯过程就是一个决策树模型,从所有选择中找到合适的继续,否则回到上一级继续。

该方法思路简单,时间复杂度过高,大概1/4的用例超时。

bool backtrack(char *s, int cur, char** wordDict, int wordDictSize) {// 基线条件if(cur == strlen(s)) {return true;}bool res = false;for(int i=0; i<wordDictSize; i++) {// 选择判断char *tmp = strstr(s+cur, wordDict[i]);if(tmp == s+cur) {// 下一级res |= backtrack(s, cur+strlen(wordDict[i]), wordDict, wordDictSize);}}// 所有选择不对时回退return res;
}
bool wordBreak(char* s, char** wordDict, int wordDictSize) {return backtrack(s, 0, wordDict, wordDictSize);
}

动态规划

  • 定义dp: dp[i]表示s中0到i-1是否可以由单词列表中单词组成
  • 转移方程:dp[i] = dp[i-len(word)] && (s[i-len(word) ~ i-1] == word)

遍历顺序保证dp[i-len(word)]在进行dp[i]判断时已经是有效的

bool wordBreak(char* s, char** wordDict, int wordDictSize) {int n = strlen(s);bool dp[n+1];memset(dp, 0, sizeof(dp));dp[0] = true;for(int i=1; i<=n; i++) {for(int j=0; j<wordDictSize; j++) {int tmp = strlen(wordDict[j]);// 转移方程if(i >= tmp && dp[i-tmp] && strstr(s+i-tmp, wordDict[j]) == s+i-tmp) {dp[i] = true;break;}}}return dp[n];
}
http://www.dtcms.com/a/335112.html

相关文章:

  • 每日任务day0816:小小勇者成长记之符文羊皮卷
  • Java -- 泛型-自定义泛型
  • 【数据结构入门】二叉树(2)
  • 数据结构 实现循环队列的三种方法
  • 模式组合应用-桥接模式(一)
  • (论文速读)ViDAR:视觉自动驾驶预训练框架
  • Harmony OS 开发入门 第四章
  • C# 反射和特性(关于应用特性的更多内容)
  • 022 基础 IO —— 文件
  • 服务器硬件电路设计之I2C问答(七):解析 I2C 通信 “卡壳” 难题:从设备无响应与跨电压兼容之道
  • Apache Hudi:数据湖的实时革命
  • 【每日一题】Day5
  • 一键检测接口是否存活:用 Python/Shell 写个轻量级监控脚本
  • 后量子密码算法ML-KEM介绍及开源代码实现
  • 数据结构:二叉平衡树
  • ROS move_base 混合功能导航 RealSense D435i + 3D 点云地图 + 楼层切换 + 路径录制 + 路径规划
  • 微服务的编程测评系统12-xxl-job-历史竞赛-竞赛报名
  • C++ 力扣 1658.将 x 减到 0 的最小操作数 题解 优选算法 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • 免费万能电子书格式转换器!Neat Converter支持 ePub、Azw3、Mobi、Doc、PDF、TXT 文件的相互转换。
  • 两个简单的设计模式的例子
  • FP16(半精度)和FP32(单精度)
  • CentOS7安装使用FTP服务
  • 产品设计.原型设计
  • TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别
  • vue优化有哪些手段?
  • ubuntu网络共享
  • 深度解析和鲸社区热门项目:电商双 11 美妆数据分析的细节与价值
  • ubuntu远程桌面很卡怎么解决?
  • [Linux] Linux系统负载监控 Linux服务管理
  • Java Stream sort算子实现:SortedOps