牛客网: BM90
题目: 在字符串s中找出包含t中所有字符的最小连续子串
思路: 初始化t中字符量计数map, 遍历t中每个字符,每遇到一个递减1;设置检测函数f,即m中所有key的值都不小于0;初始化双指针slow, fast = 0, 0;left, right = -1, -1遍历s,每遍历一个字符,检测一次f是否满足要求,满足时更新left, right值,同时移动slow,更新m;直到fast走到s的结束。
代码:
- // go
-
- package main
- // import "fmt"
-
- /**
- * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
- *
- *
- * @param S string字符串
- * @param T string字符串
- * @return string字符串
- */
-
- func check(hash map[byte]int) bool {
- for _, v := range hash {
- if v < 0 {
- return false
- }
- }
- return true
- }
-
- func minWindow( S string , T string ) string {
- // write code here
- cnt := len(S) + 1
- hash := make(map[byte]int)
- for i := 0; i < len(T); i++ {
- hash[T[i]] -= 1
- }
- slow, fast := 0, 0
- left, right := -1, -1
- for ; fast < len(S); fast++ {
- c := S[fast]
- hash[c]++
- for check(hash) {
- if cnt > fast - slow + 1 {
- cnt = fast - slow + 1
- left = slow
- right = fast
- }
- c := S[slow]
- hash[c]--
- slow++
- }
- }
- if left == -1 {
- return ""
- }
- return S[left:right+1]
- }