노트 제목 leetcode 브러시 (Golang) -. 76 최소 창 하위 문자열

(76) 최소 창 하위 문자열

문자열 S와 문자열 T 감안할 때, 복잡도 O (N)에서 T의 모든 문자를 포함 할 S의 최소 창을 찾을 수 있습니다.

예:

입력 : S = "ADOBECODEBANC"T = "ABC"
출력 "BANC"
참고

T의 모든 문자를 커버 S에서 그런 윈도우가없는 경우 빈 문자열 ""를 반환합니다.
같은 윈도우가있는 경우, 당신은 항상 S. 단지 하나의 고유 한 최소 윈도우가있을 것이라는 점을 보장

문제 해결 아이디어

func minWindow(s string, t string) string {
	if len(s) == 0 || len(t) == 0 {
		return ""
	}
	goalMap := make(map[string]int)
	for _, v := range t {
		goalMap[string(v)]++
	}

	res, minLen := "", math.MaxInt32
	l, cnt, golaSize := 0, 0, len(t)
	currMap := make(map[string]int)
	for r := 0; r < len(s); r++ {
		key := string(s[r])
		if goalMap[key] <= 0 {
			continue
		}

		if currMap[key] < goalMap[key] {
			cnt++
		}
		currMap[key]++
		if cnt == golaSize {
			k := string(s[l])
			for goalMap[k] <= 0 || currMap[k] > goalMap[k] {
				if goalMap[k] > 0 && currMap[k] > goalMap[k] {
					currMap[k]--
				}
				l++
				k = string(s[l])
			}
			if r-l+1 < minLen {
				minLen = r - l + 1
				res = s[l : r+1]
			}
		}

	}
	return res
}
게시 65 개 원래 기사 · 원의 칭찬 0 · 조회수 356

추천

출처blog.csdn.net/weixin_44555304/article/details/104287130