news 2026/10/2 2:32:42

DeepSeek LeetCode 139.单词拆分 Rust实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 139.单词拆分 Rust实现

LeetCode 139「单词拆分」的 Rust 实现。提供动态规划(推荐)和记忆化 DFS 两种写法。


思路:动态规划

定义 dp[i] 表示字符串 s 的前 i 个字符(即 s[0…i])能否被拆分成字典中的单词。

· 初始状态:dp[0] = true,空字符串默认可拆分。
· 状态转移:对每个位置 i,枚举分割点 j(0 ≤ j < i),若 dp[j] == true 且 s[j…i] 在字典中,则 dp[i] = true。
· 最终答案:dp[n],其中 n = s.len()。

用 HashSet 存储字典,实现 O(1) 的查找。


Rust 实现(动态规划)

usestd::collections::HashSet;implSolution{pubfnword_break(s:String,word_dict:Vec<String>)->bool{// 将字典转为 HashSet<&str>,借用 word_dict 中的字符串letword_set:HashSet<&str>=word_dict.iter().map(|w|w.as_str()).collect();letn=s.len();letmutdp=vec![false;n+1];dp[0]=true;foriin1..=n{forjin0..i{ifdp[j]&&word_set.contains(&s[j..i]){dp[i]=true;break;}}}dp[n]}}

说明:

· s[j…i] 是字符串切片,由于题目限定小写字母(ASCII),字节索引即字符索引,安全。
· word_set.contains(&s[j…i]):HashSet<&str> 的 contains 可直接接收 &str,因 &str: Borrow。


补充:记忆化 DFS

usestd::collections::{HashMap,HashSet};implSolution{pubfnword_break(s:String,word_dict:Vec<String>)->bool{letword_set:HashSet<String>=word_dict.into_iter().collect();letmutmemo:HashMap<usize,bool>=HashMap::new();fndfs(start:usize,s:&str,word_set:&HashSet<String>,memo:&mutHashMap<usize,bool>,)->bool{ifstart==s.len(){returntrue;}ifletSome(&res)=memo.get(&start){returnres;}forendinstart+1..=s.len(){ifword_set.contains(&s[start..end])&&dfs(end,s,word_set,memo){memo.insert(start,true);returntrue;}}memo.insert(start,false);false}dfs(0,&s,&word_set,&mutmemo)}}

两种方法均可通过。动态规划更直观,DFS + 记忆化在字典单词长度较短时可能更快。


复杂度分析

方法 时间复杂度 空间复杂度
动态规划 O(n²) O(n)
记忆化 DFS O(n²)(最坏) O(n)

其中 n = s.len()。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 2:30:35

从NAS自带笔记迁移到Markdown:踩坑记录与完整实操指南

用 NAS 的人&#xff0c;十有八九都动过“自带笔记应用”的念头。群晖叫 Note Station&#xff0c;威联通叫 Notes Station&#xff0c;这两年流行的绿联、飞牛也都有类似套件。我也是从 Note Station 用起的&#xff0c;身边还有朋友为了笔记功能专门选了某个品牌的 NAS。但用…

作者头像 李华
网站建设 2026/10/2 2:29:01

Linux驱动阻塞与非阻塞访问的理解

一、阻塞I/O应用程序的阻塞访问方式int fd; int data 0; fd open("/dev/xxx_dev", O_RDWR); ret read(fd, &data, sizeof(data));阻塞操作是指在执行设备操作时&#xff0c;若不能获得资源&#xff0c;则挂起进程直到满足可操作的条件后再进行操作。被挂起的进…

作者头像 李华
网站建设 2026/10/2 2:27:58

Windows 11 上安装配置 Claude Code 完整指南

最近我把主力开发机从 macOS 换到 Windows 11&#xff0c;第一件事就是把 Claude Code 装起来。这工具是 Anthropic 官方的命令行编程助手&#xff0c;直接在终端里跑 Claude&#xff0c;能读项目文件、改代码、执行终端命令&#xff0c;甚至能帮你完成 Git 提交。之前我在 Mac…

作者头像 李华
网站建设 2026/10/2 2:25:45

商务谈判后怎么快速找到会议内容?日历备忘场景用法

商务谈判结束后&#xff0c;多数职场人都会遇到同一个棘手问题&#xff1a;大量谈判录音、会议纪要零散堆积&#xff0c;时隔1-2天就难以精准定位对应场次的会议内容&#xff0c;复盘谈判细节、核对合作条款需要耗费大量时间翻找文件。市面上多数会议录音工具的检索功能存在明显…

作者头像 李华
网站建设 2026/10/2 2:25:37

JavaWeb获取HTTP请求体数据全解析

在如今做Java Web开发的时候, 大家经常会碰到那么一项任务, 就是去取那个HTTP请求里头的那个请求体数据这个东西。因为这个请求体的位置, 通常都会藏着客户端提交过来的各种数据, 比如说表单里面的内容, JSON格式的东西, 或者XML结构的数据之类的。对于咱们用Java写代码的同学来…

作者头像 李华
网站建设 2026/10/2 2:23:46

链表核心原理与实战指南:从C语言实现到面试算法题

1. 从一个“排队结账”的例子说起&#xff1a;链表为什么值得你认真学如果你去超市结账&#xff0c;收银台前的人是一个挨一个排着的。队伍中间的人只知道“我前面是谁、我后面是谁”&#xff0c;整条队伍没有一个总管理员拿着花名册报出每个人的位置。你想找排在第三个的人&am…

作者头像 李华