Leetcode139. Word Break单词拆分
2024-10-07 23:19:57
给定一个非空字符串 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
dp[i]表示长为i的从s的第一个字符开始的字串是否能匹配。
可以想为长度为i是否匹配需要看长度i - j是否匹配和是否有长度为j且合适正确的单词。
这样就形成了动态规划的公式。
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict)
{
int len = s.size();
vector<bool> dp(len + 1, false);
map<string, bool> check;
//i表示结束的位置,相当于end()方法;
for(int i = 0; i < wordDict.size(); i++)
{
check[wordDict[i]] = true;
}
dp[0] = true;
for(int i = 1; i <= len; i++)
{
for(int j = 0; j < i; j++)
{
if(dp[j] && check[string(s.begin() + j, s.begin() + i)])
{
dp[i] = true;
break;
}
}
}
return dp[len];
}
};
最新文章
- 【那些年关于MyEclipse的快捷键大全】
- 《CSS3实战》读书笔记 第2章 层叠样式表(CSS)
- 最流行的编程语言JavaScript能做什么?
- oracle ebs 12.20 安装成功其过程失败日记及总结(1)
- quick-cocos2d-x游戏开发【4】——加入文本
- MySQL LIKE 子句
- 获取元素属性get_attribute
- 010Edit手写PE
- Linux学习笔记之基本指令
- hdu-1814(2-sat)
- new和delete动态分配和撤销内存
- 基于jsp+servlet图书管理系统之后台用户信息插入操作
- [UE4]世界坐标、本地坐标
- 代码实现SQL SERVER TCP/IP协议配置
- Nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用
- dede后台一片空白
- 对最近java基础学习的一次小结
- 线性表之顺序表C++实现
- 【JS】if...else 优化形式
- Windows Server 2008及以上系统磁盘无法查看(About UAC and ACE)