| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | package mainimport (	"strings")func wordBreak(s string, wordDict []string) []string {	resMap := make(map[string][]string)	return wordBreakDFS(s, wordDict, &resMap)}func wordBreakDFS(s string, wordDict []string, resMap *map[string][]string) []string {	if _, ok := (*resMap)[s]; ok { // DFS solution is very pratical! Try to remember		return (*resMap)[s]	} // Use a map to limit the search	if len(s) == 0 {		return []string{""}	}	res := make([]string, 0)	for i := range wordDict {		if strings.HasPrefix(s, wordDict[i]) {			sublist := wordBreakDFS(s[len(wordDict[i]):], wordDict, resMap)			for j := range sublist {				var suffix string				if sublist[j] != "" {					suffix = " " + sublist[j]				}				res = append(res, wordDict[i]+suffix)			}		}	}	(*resMap)[s] = res	return res}// func main() {// 	fmt.Println(wordBreak(// 		"catsanddog",// 		[]string{"cat", "cats", "and", "sand", "dog"}))// 	fmt.Println(wordBreak(// 		"pineapplepenapple",// 		[]string{"apple", "pen", "applepen", "pine", "pineapple"}))// 	fmt.Println(wordBreak(// 		"catsandog",// 		[]string{"cats", "dog", "sand", "and", "cat"}))// }
 |