小米面试题:单词拆分
题目:
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:
拆分时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。
示例 1:
输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。
示例 2:
输入: s = “applepenapple”, wordDict = [“apple”, “pen”]
输出: true
解释: 返回true 因为 “applepenapple” 可以被拆分成 “apple pen apple”。注意你可以重复使用字典中的单词。
示例 3:
输入: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]
输出: false
解题方案:动态规划
//单词拆分
//wordDict 单词字典
//dp[i] 表示前一个字符能否被拆分成功字典中出现的单词
//s 是源字符串
func wordBreak(s string, wordDict []string) bool {//定义一个mapwordDictSet := make(map[string]bool)for _, w := range wordDict {wordDictSet[w] = true //key是每个单词}dp := make([]bool, len(s) + 1)dp[0] = truefor i := 1; i <= len(s); i++ {for j := 0; j < i; j++ {if dp[j] && wordDictSet[s[j:i]] {dp[i] = truebreak}}}return dp[len(s)]
}
依次遍历0~i之间的字符串,每次判断0~i之间的字符串是否满足字典里面的要求。d[j]保留了前j字符对应的状态,wordDictSet[s[j:i]]为最后一个字符串的状态,最后一个字符串前面所有的字符串都可以通过d[j]来判断是否满足条件。
如果有匹配,则返回对应dp下标对应的状态。
时间复杂度:O(n^2)
空间复杂度:O(n)
参考地址:https://leetcode-cn.com/problems/word-break/solution/dan-ci-chai-fen-by-leetcode-solution/
小米面试题:单词拆分相关推荐
- 大数据学长面试-------小米面试题
小米面试题 学长1 大家可以投一下小米的推荐算法. 一面:问两个有序大数组合并成一个数组的最佳方法,还有快排,问了所有项目. 二面:是问推荐算法的业务实现,还有如果你自己做一个推荐,你会怎么选择模型. ...
- LeetCode 140. 单词拆分 II
文章目录 解法1:回溯 + 记忆数组,记录当前字符串 解法2:回溯 + 记忆数组,记录索引 `i` 到字符结尾的字符串能拆分的组合 https://leetcode-cn.com/problems/w ...
- 单词拆分—leetcode139
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中没有重复 ...
- leetcode 140. Word Break II | 140. 单词拆分 II(动态规划)
题目 https://leetcode.com/problems/word-break-ii/ 题解 由 leetcode 139. Word Break | 139. 单词拆分(动态规划) 改造而来 ...
- LeetCode 140. 单词拆分 II(DP+回溯)
1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...
- LeetCode 139. 单词拆分(DP)
1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字 ...
- leetcode - 139. 单词拆分
139. 单词拆分 -------------------------------------------- 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以 ...
- LeetCode--139. 单词拆分(动态规划)
单词拆分(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题的难点在于示例3,字符串包含字典中的所有单词,但是就是 ...
- 动态规划——单词拆分(Leetcode 139)
题目选自Leetcode 139.单词拆分 问题描述: 解题思路: 怎么想到用动态规划的? 题目的相关标签中有动态规划.(QAQ) dp数组怎么选? dp[i]: 表示子串s[0:i] 是否全部能拆分 ...
最新文章
- 关于StreamReader的构造函数
- 容器可以作为全局变量吗_四季青是风水树吗?哪些可以作为风水树?
- AUTOSAR从入门到精通100讲(十四)-一文详解CAN总线错误帧
- hadoop eclipse windows
- python编写抢座位软件_程序员硬核Python抢票教程”,帮你抢回家车票
- JAVA设置流中当前位置_java文件流的问题!急
- IDEA 打包可执行 jar 包
- 第一章 时间序列基础知识
- 老板口中的一区二区是什么意思?
- RT-Thread与cubemx|74HC595驱动数码管详解
- DirectX修复工具 4.0 标准版
- 缺陷管理工具JIRA和禅道对比
- 土地购买(bzoj 1597)
- ERROR: ld.so: object ‘/usr/local/lib/libc2.28.so‘ from /etc/ld.so.preload cannot be preloaded ...
- android unity 瘦身,unity/unity3d编译成android apk包瘦身方法
- 修改smartbi的JVM调优
- 虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!
- 注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”(附链接)
- 使用单片机的串口蓝牙通信写的接收SBUF里的数据,并进行发送执行命令,显示在数码管上,波特率9600
- 深度相机原理揭秘之3D结构光Sensor(iPhone X、小米8探索版、OPPO Find)
热门文章
- 【数据挖掘】神经网络 后向传播算法( 向后传播误差 | 输出层误差公式 | 隐藏层误差公式 | 单元连接权值更新公式 | 单元偏置更新公式 | 反向传播 | 损失函数 | 误差平方和 | 交叉熵 )
- 【数据挖掘】数据挖掘简介 ( 数据挖掘引入 | KDD 流程 | 数据源要求 | 技术特点 )
- windows上安装gcc/g++环境(MinGW,msys64等)
- jar - 操作jar包的工具
- 远程桌面连接mstsc 超扎心
- Hibernate中的Entity类之间的继承关系之一MappedSuperclass
- macOS下加载动态库dylib报code signature invalid错误的解决办法
- 关于子网划分—为什么全0全1子网号不能使用
- LeetCode: Unique Binary Search Trees [095]
- 【转】如何选好Android开发书籍和教程[总结]