class Solution {
public:
bool wordBreak(string s, vector<string> wordDict)
{
vector<bool> wordB(s.length() + , false);
wordB[] = true;
for (int i = ; i < s.length() + ; i++)
{
for (int j = i - ; j >= ; j--)
{
if (wordB[j] && find(wordDict.begin(), wordDict.end(), s.substr(j, i - j)) != wordDict.end())
{
wordB[i] = true;
break;
//只要找到一种切分方式就说明长度为i的单词可以成功切分,
//因此可以跳出内层循环。
}
}
}
return wordB[s.length()];
}
};

补充一个python的实现:

 class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
n = len(s)
wordDict = set(wordDict)
dp = [False] * (n + )
dp[] = True
for i in range(,n+):
for j in range(i-,-,-):
if dp[j] and s[j:i] in wordDict:
dp[i] = True
break
return dp[n]

dp是bool类型的一维数组,长度是n+1,每个元素表示:从第一个字符开始,到当前位置的(子)字符串,是否可以由字典中的单词表示。

判断策略是对当前子字符串的一次(逆序)遍历。

遍历过程为:以当前字符为结尾,向前遍历,每次找到一个分割位置j,

将子字符串分为“前部”,“后部”两个部分,“前部”是s[0]~s[j-1],“后部”是s[j]~s[i]。

判断当前dp值是否为True,需要满足两个条件:

1.“前部”子串可以由字典中的单词表示;

2.“后部”子串存在于字典中。

在逆序遍历当前子字符串的过程中,只要找到一个位置可以满足上述两个条件,即可标记当前位置dp值为True,结束内层循环。

如果逆序遍历到全字符串s的头部(索引为0)仍然没有找到符合上述两个条件的位置,那说明当前位置不能由字典中的单词表示,内存循环结束,继续外层循环。

leetcode139的更多相关文章

  1. LeetCode139:Word Break

    Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...

  2. [Swift]LeetCode139. 单词拆分 | Word Break

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...

  3. LeetCode139:Word Break

    题目: Given a string s and a dictionary of words dict, determine if s can be segmented into a space-se ...

  4. 【1】【leetcode-139】【回溯超时、动态规划】单词拆分

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词.你可以假设字典中没有重复的 ...

  5. Leetcode139. Word Break单词拆分

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中没有重复 ...

随机推荐

  1. Jsの数组练习-求一组数中的最大值和最小值,以及所在位置

    要求:求一组数中的最大值和最小值,以及所在位置 代码实现: <!DOCTYPE html> <html lang="en"> <head> &l ...

  2. RabbitMQ 的安装----windows环境

    一.RabbitMQ在windows下的安装 RabbitMQ 它依赖于Erlang,在window上安装时,需要先安装Erlang. 首先确定你的window电脑是32位还是64位,然后下载对应版本 ...

  3. 前端开发【第一篇: HTML】

    HTML初识  1.什么是HTML? HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).  2.网页的组成 我们平时 ...

  4. VBA定时执行某程序

    OnTime 方法参阅应用于示例特性安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后). expression.OnTime(EarliestTime, Pro ...

  5. jenkins 持续集成iOS开发

    持续集成即Continuous Integration,简称CI 1,安装jenkins,brew install jenkins 2,在浏览器输入localhost:8080会出现一个网页,要求输入 ...

  6. Javascript内置对象、原生对象、宿主对象关系

    https://blog.csdn.net/foamflower/article/details/9165691

  7. zombodb 索引创建

      索引的创建是zombodb 的核心,我们都是需要先创建table,然后创建索引,创建的时候我们可以指定es 集群的地址,同时可能需要使用 一些地址api(比如数据直接存储在es 中而不是pg 中) ...

  8. Yii2中多表关联查询(hasOne、hasMany、join、joinwith)

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order      (id  order_name  customer_id ...

  9. Hi3516EV100烧录出厂固件

    1.Hitool烧录uboot 2.uboot下烧录固件 setenv serverip 192.168.1.138 mw.b ff ;tftp ;sf probe ;sf erase ;sf wri ...

  10. etcd和redis的比较和日常使用场景

    转自https://blog.csdn.net/weixin_41571449/article/details/79429511 个人观点:etcd的红火来源于kurbernetes用etcd做服务发 ...