u
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package top100liked
|
||||
|
||||
import "testing"
|
||||
|
||||
// https://leetcode.cn/problems/minimum-window-substring/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
func minWindow(s string, t string) string {
|
||||
if len(t) > len(s) {
|
||||
return ""
|
||||
}
|
||||
need := make(map[byte]int)
|
||||
for _, v := range []byte(t) {
|
||||
need[v]++
|
||||
}
|
||||
|
||||
window := make(map[byte]int)
|
||||
valid := 0
|
||||
left := 0
|
||||
minLen := len(s) + 1
|
||||
start := 0
|
||||
|
||||
for right := 0; right < len(s); right++ {
|
||||
ch := s[right]
|
||||
if _, ok := need[ch]; ok {
|
||||
window[ch]++
|
||||
if window[ch] == need[ch] {
|
||||
valid++
|
||||
}
|
||||
}
|
||||
|
||||
for valid == len(need) {
|
||||
if right-left+1 < minLen {
|
||||
minLen = right - left + 1
|
||||
start = left
|
||||
}
|
||||
|
||||
d := s[left]
|
||||
left++
|
||||
if _, ok := need[d]; ok {
|
||||
if window[d] == need[d] {
|
||||
valid--
|
||||
}
|
||||
window[d]--
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if minLen == len(s)+1 {
|
||||
return ""
|
||||
}
|
||||
|
||||
return s[start : start+minLen]
|
||||
}
|
||||
|
||||
func TestS12(t *testing.T) {
|
||||
println(minWindow("ADOBECODEBANC", "ABC"))
|
||||
println(minWindow("a", "a"))
|
||||
println(minWindow("a", "aa"))
|
||||
}
|
||||
Reference in New Issue
Block a user