双指针算法之滑动窗口 | 力扣76.最小覆盖字串
生活随笔
收集整理的這篇文章主要介紹了
双指针算法之滑动窗口 | 力扣76.最小覆盖字串
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 本文講解力扣76.最小覆蓋字串問題
- 主要用到的是滑動窗口的思想
目錄
- 76.最小覆蓋字串
- 題目:
- 分析:
- 步驟描述:
- 復(fù)雜度分析:
- 結(jié)果
76.最小覆蓋字串
題目:
給定字符串 S 以及字符串 T ,求 S 種 包含 T 的最短連續(xù)子字符串的長度
給你一個字符串 s 、一個字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字符的子串,則返回空字符串 “” 。
注意:如果 s 中存在這樣的子串,我們保證它是唯一的答案。
要求 時間復(fù)雜度 ≤ O(n)
分析:
首先,返回的是字符串類型,想到使用 substr函數(shù) 截取對應(yīng)的子串
使用數(shù)組,映射 T 中的字符情況,標(biāo)記字符存在與否、對應(yīng)的數(shù)量
使用滑動窗口的解法,可以解決大部分字符串匹配的問題~
步驟描述:
- L R 指針。都從最左端到最右端移動,且 L <= R,L 只能在R 左邊或者重合
- 挪動指針,根據(jù)映射情況,找到滿足要求的窗口
- 找到一個窗口,繼續(xù)挪動,不影響結(jié)果的情況下尋找其它滿足要求的窗口,取最小值
- 挪動的時候,注意 L 指針會更新,所以會“拋出”窗口原來最左邊的字符,需要處理“如果窗口拋出的是T中存在的某個字符”這種情況
復(fù)雜度分析:
雖然代碼使用了 for 和 while嵌套,但是 while 只是用來滑動的,所以時間復(fù)雜度是滿足要求的 O(n)
結(jié)果
總結(jié)
以上是生活随笔為你收集整理的双指针算法之滑动窗口 | 力扣76.最小覆盖字串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络(三)计算机网络-物理层 |
- 下一篇: 双指针算法 | 力扣344. 反转字符串