关闭

Leetcode165: Word Break

标签: leetcodealgorithm
220人阅读 评论(0) 收藏 举报
分类:

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".

题目意思是,给定词典的情况下,看看原字符串能不能全部成功地被给定的词典分割。一开始,最自然的想法是,使用递归。提交,超时了。想想,这个问题其实具有动态规划的特点。比如计算catsanddog的分割方式,那么倒着想如下:
到了最后一个字符g的时候,
如果能在g之前切一刀,也就是说,如果g在词典中以及catsanddo能够成功切分,那么原字符串就可以成功切分。
或者,如果能在og之前切一刀,也就是说,如果og在词典中以及catsandd能够成功切分,那么原字符串就可以成功切分。
或者,如果能在dog之前切一刀,也就是说,如果dog在词典中以及catsand能够成功切分,那么原字符串就可以成功切分。
或者,如果能在ddog之前切一刀,也就是说,如果ddog在词典中以及catsan能够成功切分,那么原字符串就可以成功切分。
或者,如果能在nddog之前切一刀,也就是说,如果nddog在词典中以及catsa能够成功切分,那么原字符串就可以成功切分。
或者,如果能在anddog之前切一刀,也就是说,如果anddog在词典中以及cats能够成功切分,那么原字符串就可以成功切分。
或者,如果能在sanddog之前切一刀,也就是说,如果sanddog在词典中以及cat能够成功切分,那么原字符串就可以成功切分。
或者,如果能在tsanddog之前切一刀,也就是说,如果tsanddog在词典中以及ca能够成功切分,那么原字符串就可以成功切分。
或者,如果能在atsanddog之前切一刀,也就是说,如果atsanddog在词典中以及c能够成功切分,那么原字符串就可以成功切分。
或者,如果能在catsanddog之前切一刀,也就是说,如果catsanddog在词典中以及""能够成功切分,那么原字符串就可以成功切分。
使用一个数组bool wordB[i] 来记录,在单词长度为i的时候,能否成功切分(i取值范围必然为[ 0, word.length() ] )

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


0
0
查看评论

LeetCode(139)Word Break

题目如下: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all ...
  • feliciafay
  • feliciafay
  • 2014-02-09 02:13
  • 8977

leetcode: Word Break 纪念又一次死在动态规划上

动态规划是算法中的一个基本的算法,但是个人感觉变化很多,有时候知道能够用,但是却想不到思路。 Given a string s and a dictionary of words dict, determine if s can be se...
  • qinzhaokun
  • qinzhaokun
  • 2015-10-08 15:13
  • 781

LeetCode || Word Break II

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionar...
  • jiadebin890724
  • jiadebin890724
  • 2014-06-26 12:33
  • 5513

Leetcode Word Break II

难度是5星级了。 主要的难点: 要优化到极致,不能直接使用递归回溯法,否则超时。 本程序是连打带消地对付了这种情况效率是十分高的了,有12ms运行时间的战果。 比网上很多博客的程序要优化,关键是动态规划表的构建功力,本程序的构建方法应该是最优的。有能改进的欢迎指教。 本程序方法:
  • kenden23
  • kenden23
  • 2014-03-04 07:48
  • 4706

Word Break II -- LeetCode

原题链接: http://oj.leetcode.com/problems/word-break-ii/  这道题目要求跟Word Break比较类似,不过返回的结果不仅要知道能不能break,如果可以还要返回所有合法结果。一般来说这种要求会让动态规划的效果减弱很多,因为我...
  • linhuanmars
  • linhuanmars
  • 2014-03-29 00:48
  • 18850

[C++]LeetCode: 112 Word Break(DP)

题目: Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one ...
  • cinderella_niu
  • cinderella_niu
  • 2015-01-20 11:05
  • 1271

Leetcode_word-break(c++ and python version)

地址:http://oj.leetcode.com/problems/word-break/
  • flyupliu
  • flyupliu
  • 2014-04-05 22:27
  • 665

Word Break -- LeetCode

原题链接: http://oj.leetcode.com/problems/word-break/  这道题仍然是动态规划的题目,我们总结一下动态规划题目的基本思路。首先我们要决定要存储什么历史信息以及用什么数据结构来存储信息。然后是最重要的递推式,就是如从存储的历史信息中得到...
  • linhuanmars
  • linhuanmars
  • 2014-03-28 04:02
  • 22493

139. 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 mo...
  • gao1440156051
  • gao1440156051
  • 2016-08-12 16:34
  • 772

【leetcode】Word Break(python)

思路是这样的,我们从第一个字符开始向后依次找,直到找到一个断句的地方,使得当前获得的子串在dict中,若找到最后都没找到,那么就是False了。 在找到第一个后,接下来找下一个断句处,当然是从第一个断句处的下一个字符开始找连续的子串,但是这时与第一个就稍有不同,比如说word=‘ab’, dict=...
  • shiquxinkong
  • shiquxinkong
  • 2014-07-15 21:53
  • 1761
    个人资料
    • 访问:85190次
    • 积分:2502
    • 等级:
    • 排名:第17405名
    • 原创:148篇
    • 转载:119篇
    • 译文:0篇
    • 评论:6条
    个人主页
    文章分类
    最新评论