def wordBreak(s, dict): paths = [path for seg in dict for path in find_word_ranges(seg, s)] paths.sort() reachable = [False for _ in xrange(len(s)+1)] reachable[0] = True for b,e in paths: reachable[e] |= reachable[b] return reachable[-1]
def wordBreak(s, dict): paths = [path for seg in dict for path in find_word_ranges(seg, s)] paths.sort() reachable = [False for _ in xrange(len(s) + 1)] reachable[0] = True for b, e in paths: reachable[e] |= reachable[b] return reachable[-1]
def wordBreak(s, dict): paths = [path for seg in dict for path in find_word_ranges(seg, s)] paths.sort() if not any(b==0 for b,_ in paths): return [] if not any(e==len(s) for _,e in paths): return [] parents = [[] for _ in xrange(len(s)+1)] parents[0] = [] for b,e in paths: parents[e].append(b) return [" ".join(s[a:b] for (a,b) in seg) for seg in iter_segs(len(s), parents)]
def wordBreak(s, dict): paths = [path for seg in dict for path in find_word_ranges(seg, s)] paths.sort() if not any(b == 0 for b, _ in paths): return [] if not any(e == len(s) for _, e in paths): return [] parents = [[] for _ in xrange(len(s) + 1)] parents[0] = [] for b, e in paths: parents[e].append(b) return [ " ".join(s[a:b] for (a, b) in seg) for seg in iter_segs(len(s), parents) ]