给定一个非空字符串 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];
}
};

最新文章

  1. 【那些年关于MyEclipse的快捷键大全】
  2. 《CSS3实战》读书笔记 第2章 层叠样式表(CSS)
  3. 最流行的编程语言JavaScript能做什么?
  4. oracle ebs 12.20 安装成功其过程失败日记及总结(1)
  5. quick-cocos2d-x游戏开发【4】——加入文本
  6. MySQL LIKE 子句
  7. 获取元素属性get_attribute
  8. 010Edit手写PE
  9. Linux学习笔记之基本指令
  10. hdu-1814(2-sat)
  11. new和delete动态分配和撤销内存
  12. 基于jsp+servlet图书管理系统之后台用户信息插入操作
  13. [UE4]世界坐标、本地坐标
  14. 代码实现SQL SERVER TCP/IP协议配置
  15. Nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用
  16. dede后台一片空白
  17. 对最近java基础学习的一次小结
  18. 线性表之顺序表C++实现
  19. 【JS】if...else 优化形式
  20. Windows Server 2008及以上系统磁盘无法查看(About UAC and ACE)

热门文章

  1. flex:1将页面铺满
  2. Trip
  3. Java怎样实现解析身份证号
  4. LeetCode第三题—— Longest Substring Without Repeating Characters(最长无重复子字符串)
  5. windows cmd command
  6. thinkphp url大小写
  7. csp-s模拟99题解
  8. 谈谈域名DNS的缓存问题
  9. 深入分析Service启动、绑定过程
  10. 微信小程序 主题皮肤切换(switch开关)