邓心一 6 vuotta sitten
vanhempi
commit
489b43a54e
2 muutettua tiedostoa jossa 58 lisäystä ja 4 poistoa
  1. 46 4
      hard/76.go
  2. 12 0
      hard/84.go

+ 46 - 4
hard/76.go

@@ -1,9 +1,51 @@
 package main
 
 func minWindow(s string, t string) string {
-	return ""
+	m, n := len(s), len(t)
+	if n == 0 {
+		return ""
+	}
+	target, curr := make([]int, 256), make([]int, 256) // A little trick: byte < 256
+	for i := 0; i < n; i++ {
+		target[t[i]]++
+	}
+	cnt := 0
+	left, right := -1, -1
+	minLeft, minRight := -1, m-1
+	for { // Create a slide window; all chars found, contract left; not enough, expand right.
+		if cnt != n { // Expand right
+			right++
+			if right == m {
+				break
+			}
+			if v := target[s[right]]; v > 0 {
+				curr[s[right]]++
+				if curr[s[right]] <= v {
+					cnt++
+				}
+			}
+		} else { // Contract left
+			left++
+			if v := target[s[left]]; v > 0 {
+				curr[s[left]]--
+				if curr[s[left]] < v {
+					cnt--
+					if right-left < minRight-minLeft {
+						minLeft, minRight = left, right
+					}
+				}
+			}
+		}
+	}
+	if minLeft == -1 {
+		return ""
+	}
+	return s[minLeft : minRight+1]
 }
 
-func main() {
-
-}
+// func main() {
+// 	println(minWindow("ADOBECODEBANC", "ABC"))
+// 	println(minWindow("", "ABC"))
+// 	println(minWindow("ADOBECODEBANC", ""))
+// 	println(minWindow("ADOBECODEBANC", "CC"))
+// }

+ 12 - 0
hard/84.go

@@ -0,0 +1,12 @@
+package main
+
+func largestRectangleArea(heights []int) int {
+	return 0
+}
+
+func main() {
+	h := []int{2, 1, 5, 6, 2, 3}
+	println(largestRectangleArea(h))
+	h = []int{}
+	println(largestRectangleArea(h))
+}