[LeetCode] Word Break 解题思路
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode",
dict = ["leet", "code"].
Return true because "leetcode" can be segmented as "leet code".
解题思路:
问题: 根据给定的单词字典,判断一个字符串是否可以全部被分割为有效单词。
第一个问题,给定一个字符串, 怎么判断它是不是一个有效单词呢?
本人首先想到是之前做过的 Trie Tree ,打算用 Trie Tree 结构来判断一个字符串是不是一个有效单词。
后来才知道, unordered_set 是 C++ 自带的数据结构,能直接用来检索一个字符串是否为有效单词。囧。看来对 C++ 还不够熟悉。
值得一提的是,用 Trie Tree 实现的算法也通过了 LeetCode 的测试,当然,unordered_set 的完成效率更快。
第二个问题,如何判断一个字符串是否可以全部被分割为有效单词,即原问题。
假设将字符串 s 分割为两段,[0,i-1], [i, n-1],如果[0, i-1] 为有效单词,[i, n-1]为有效单词集合,那么 s 就是一个有效字符串。
将 i 从 1 到 n-1 遍历一次,求得 s 是否是一个有效字符串。
第三个问题,效率满,出现很多反复求解的子问题。
DP思路,即表格法,记录已计算结果。
    vector<int> v;
    bool isMatch(string s, unordered_set<string>& wordDict){
        unordered_set<string>::iterator us_iter = wordDict.find(s);
        if (us_iter != wordDict.end()) {
            return true;
        }
        for (int i =  ; i < s.size(); i++) {
            string leftS = s.substr(, i);
            unordered_set<string>::iterator leftS_iter = wordDict.find(leftS);
            if (leftS_iter != wordDict.end()) {
                bool isWordR;
                if (v[i] != -) {
                    isWordR = v[i];
                }else{
                    isWordR = isMatch(s.substr(i, s.size() - i), wordDict);
                    v[i] = isWordR;
                }
                if (isWordR) {
                    return true;
                }
            }
        }
        return false;
    }
    bool wordBreak(string s, unordered_set<string>& wordDict) {
        vector<int> tmp(s.size(), -);
        v = tmp;
        bool res = isMatch(s, wordDict);
        return res;
    }
[LeetCode] Word Break 解题思路的更多相关文章
- [LeetCode] Word Break II 解题思路
		Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ... 
- LeetCode: Word Break II 解题报告
		Word Break II Given a string s and a dictionary of words dict, add spaces in s to construct a senten ... 
- 【LeetCode】139. Word Break 解题报告(Python & C++)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ... 
- [leetcode]Word Break II @ Python
		原题地址:https://oj.leetcode.com/problems/word-break-ii/ 题意: Given a string s and a dictionary of words ... 
- [LeetCode] Word Break II 拆分词句之二
		Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ... 
- LeetCode ||& Word Break && Word Break II(转)——动态规划
		一. Given a string s and a dictionary of words dict, determine if s can be segmented into a space-sep ... 
- LeetCode:Word Break II(DP)
		题目地址:请戳我 这一题在leetcode前面一道题word break 的基础上用数组保存前驱路径,然后在前驱路径上用DFS可以构造所有解.但是要注意的是动态规划中要去掉前一道题的一些约束条件(具体 ... 
- LeetCode Word Break II
		原题链接在这里:https://leetcode.com/problems/word-break-ii/ 题目: Given a string s and a dictionary of words ... 
- [leetcode]Word Break @ Python
		原题地址:https://oj.leetcode.com/problems/word-break/ 题意: Given a string s and a dictionary of words dic ... 
随机推荐
- Repeater 动态增加删除一行
			文章参考:文章参考http://www.cnblogs.com/dataadapter/archive/2012/06/25/2562885.html 效果: 前台代码: <%@ Page La ... 
- Visual EmbedLinux Tools:让vs支持嵌入式Linux开发(转)
			转自:http://blog.csdn.net/lights_joy/article/details/49499743 1 什么是Visual EmbedLinux Tools Visual Embe ... 
- php中foreach()函数与Array数组经典案例讲解
			//php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ... 
- PHP文件上传与安全
			文件上传的流程 上传必须由POST方式的file类型表单提交,被提交的地方 一定是一个php程序,用户在表单使用file类型的域.选在一个自己电脑上的文件,提交到php程序以后 其实就已经完成了一个上 ... 
- 聊一聊c++中指针为空的三种写法  ----->NULL, 0, nullptr
			看到同事用了一下nullptr.不是很了解这方面东东,找个帖子学习学习 http://www.cppblog.com/airtrack/archive/2012/09/16/190828.aspx N ... 
- GCC编译器的安装
			1.GCC简介 GCC(GNU Compiler Collection)是一套功能强大.性能优越的编程语言编译器,它是GNU计划的代表作品之一.GCC是Linux平台下最常用的编译器,GCC原名为GN ... 
- ruby特性
			1. ruby类结构 每个类都是Class类的对象 所有类都继承自BasicObject类(Module类不能实例化) 2. 单例方法 单例方法可以不定义在类中,只为某个对象定义方法,所以称为单例方法 ... 
- UFLDL教程之(三)PCA and Whitening exercise
			Exercise:PCA and Whitening 第0步:数据准备 UFLDL下载的文件中,包含数据集IMAGES_RAW,它是一个512*512*10的矩阵,也就是10幅512*512的图像 ( ... 
- 根据http协议传送数据
			发送的内容: [50 4f 53 54 20 2f 64 65 78 2f 66 69 72 65 70 6f 77 65 72 20 48 54 54 50 2f 31 2e 31 0d 0a 43 ... 
- js backbone
			http://www.the5fire.com/backbone-js-tutorials-pdf-download.html http://www.infoq.com/cn/articles/mob ... 
