Leetcode: Word Break

来源:互联网 发布:古道社区网络黑市 编辑:程序博客网 时间:2024/05/16 08:51

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

It’s just a DP problem, code shows blow:

__author__ = 'phycept'class Solution:    def wordBreak(self, s, wordDict):        contain = [False] * len(s)        i = -1        while i < len(s):            i += 1            for j in range(i+1,len(s) + 1):                if wordDict.__contains__(s[i:j]):                    contain[j - 1] = True            while i < len(s) and not contain[i]:                i += 1        return contain[-1]

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 dictionary word.

Return all such possible sentences.

For example, given
s = “catsanddog”,
dict = [“cat”, “cats”, “and”, “sand”, “dog”].

A solution is [“cats and dog”, “cat sand dog”].

Nearly it’s same as the first one, just add a place to remember the break point, I choose a array of list based on the first problem, code shows below:

__author__ = 'phycept'class Solution:    def wordBreak(self, s, wordDict):        contain = [[] for  i in range(len(s))]        i = -1        while i < len(s):            i += 1            for j in range(i+1,len(s) + 1):                if wordDict.__contains__(s[i:j]):                    contain[j - 1].append(i)            while i < len(s) and not contain[i]:                i += 1        sentence = []        for b in range(len(contain[-1])):            sentence += print_word(contain, contain[-1][b], len(s)+1, s)        return sentencedef print_word(contain, i, j,s):    ed = ''    if j != len(contain)+1:        ed = ' '    if not i:        return [s[i:j] + ed]    lst = []    for b in range(len(contain[i - 1])):        pre = print_word(contain, contain[i-1][b], i, s)        for a in range(len(pre)):            lst.append(pre[a] + s[i:j]+ed)    return lst
0 0
原创粉丝点击