class(object): defdfs(self, s, A, idx, path, rs): if idx == 0: rs.append(' '.join(path[::-1])) return for i in xrange(idx): if A[idx][i]: path.append(s[i: idx]) self.dfs(s, A, i, path, rs) path.pop()
defwordBreak(self, s, wordDict): """ :type s: str :type wordDict: Set[str] :rtype: List[str] """ n = len(s) dp = [False] * (n + 1) dp[0] = True A = [[False] * n for i in xrange(n + 1)] for i in xrange(1, n + 1): for j in xrange(i - 1, -1, -1): if dp[j] and s[j: i] in wordDict: dp[i] = True A[i][j] = True ifnot dp[n]: return [] rs = [] path = [] self.dfs(s, A, n, path, rs) return rs
近期评论