1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| package main
import ( "fmt" )
func wordBreak(s string, wordDict []string) bool { wordSet := make(map[string]bool) for _, word := range wordDict { wordSet[word] = true }
n := len(s) dp := make([]bool, n + 1) dp[0] = true for i := 1; i <= n; i ++ { for j := 0; j < i; j ++ { if dp[j] && wordSet[s[j:i]] { dp[i] = true break } } }
return dp[n] }
func main() { testCases := []struct { s string wordDict []string expected bool }{ { s: "leetcode", wordDict: []string{"leet", "code"}, expected: true, }, { s: "applepenapple", wordDict: []string{"apple", "pen"}, expected: true, }, { s: "catsandog", wordDict: []string{"cats", "dog", "sand", "and", "cat"}, expected: false, }, }
for i, tc := range testCases { result := wordBreak(tc.s, tc.wordDict) fmt.Printf("Test Case %d, Input: s = %q, wordDict = %v\n", i+1, tc.s, tc.wordDict) if result == tc.expected { fmt.Printf("Test Case %d, Output: %v, PASS\n", i+1, result) } else { fmt.Printf("Test Case %d, Output: %v, FAIL (Expected: %v)\n", i+1, result, tc.expected) } } }
|