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. Java学习笔记43(Spring的jdbc模板)

    在之前的学习中,我们执行sql语句,需要频繁的开流,关流比较麻烦,为了更加的简化代码,我们使用Spring 的jdbc模板jdbcTemplate来简化我们的代码量:需要导入的包有: 我们在之前的dr ...

  2. 根据ip获取地理信息

    function getIPLoc_sina($queryIP){    $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?form ...

  3. ecmall 学习记录

    1. /* 载入配置项 */ $setting =& af(MODULE); Conf::load($setting->getAll()); af方法定义如下: /** * 获取数组文件 ...

  4. 利用maven的profiles灵活的配置多环境

    <!--多环境配置--> <profiles> <profile> <id>dev</id> <activation> < ...

  5. Gym101889E. Enigma(bfs+数位)

    比赛链接:传送门 题目大意: 求一个十进制大数S(有部分数位为"?")能被N整除时的最小值,如果没有办法被N整除,输出"*". 思路: 一个数位上的数值增加1后 ...

  6. ubuntu 16.04 更换源

    进入/etc/apt/ cd /etc/apt 在修改前先对 sources.list文件进行备份 sudo cp sources.list sources.list.bak 修改sources.li ...

  7. 2018.4.25 github创建新项目

    echo "# IntegrateDemo" >> README.md git init git add README.md git commit -m "f ...

  8. 第二章 JavaScript文档(上)

    JavaScript 1.JavaScript简介 起源 在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成.Netscape在最初将其脚本语言命名 ...

  9. HBase各版本对Hadoop版本的支持情况

    转载自:http://blog.csdn.net/sunny05296/article/details/54089194 安装HBase时,要考虑选择正确的Hadoop版本,否则可能出现不兼容的情况. ...

  10. docker 进程监控 Dumb-Init进程信号处理 --转自https://blog.csdn.net/tiger435/article/details/54971929

    随着docker及Kubernetes技术发展的越来越成熟稳定,越来越多的公司开始将docker用于生产环境的部署,相比起物理机上直接部署,多了一层docker容器的环境,这就带来一个问题:进程信号接 ...