dengxinyi 7 years ago
parent
commit
f023b88f3c
1 changed files with 54 additions and 1 deletions
  1. 54 1
      medium/139.go

+ 54 - 1
medium/139.go

@@ -1,9 +1,62 @@
 package main
 
-func wordBreak(s string, wordDict []string) bool {
+func wordBreakOld(s string, wordDict []string) bool { // TLE :^<
+	length := len(s)
+	if length == 0 || len(wordDict) == 0 {
+		return false
+	}
+	set := make(map[string]bool, 0)
+	min, max := length, 0
+	for _, v := range wordDict {
+		vLen := len(v)
+		if vLen < min {
+			min = vLen
+		}
+		if vLen > max {
+			max = vLen
+		}
+		set[v] = true
+	}
+	return breakHelper(s, &set, 0, length, min, max)
+}
+
+func breakHelper(s string, set *map[string]bool, beg, end, min, max int) bool {
+	if beg == end {
+		return true
+	}
+	i := beg + max
+	if i > end {
+		i = end
+	}
+	for ; i > beg; i-- {
+		if (*set)[s[beg:i]] {
+			if breakHelper(s, set, i, end, min, max) {
+				return true
+			}
+		}
+	}
 	return false
 }
 
+func wordBreak(s string, wordDict []string) bool { // Faster DP solution
+	length := len(s)
+	result := make([]bool, length+1)
+	result[0] = true
+	set := make(map[string]bool, 0)
+	for _, v := range wordDict {
+		set[v] = true
+	}
+	for i := 1; i <= length; i++ {
+		for j := 0; j < i; j++ {
+			if result[j] && set[s[j:i]] {
+				result[i] = true
+				break
+			}
+		}
+	}
+	return result[length]
+}
+
 func main() {
 	println(wordBreak(
 		"catsanddogsand",