2016年12月18日 星期日

[LeetCode] 76. Minimum Window Substring

轉自LeetCode

Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S = "ADOBECODEBANC"
T = "ABC"
Minimum window is "BANC".
Note:
If there is no such window in S that covers all characters in T, return the empty string "".
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
<Solution>

這題要在 string S中找到最小 substring,可以包含 string T 裡面所有的字元

解題想法如下(參考資料)
  • 用個 map 代表在 string T 裡面有出現過的字元
  • 準備兩個指針代表 substring 的開始和結束,以及一個 count,其初始值是 string T 的長度
  • 開始歷遍 string S,當遇到同樣有在 string T 裡面的字元時,就把 count 減一
  • 每個歷遍的字元,都要去 map 裡面對應的位置減一,代表被歷遍過了
  • 當 count 等於零的時候,代表目前 start 和 end 所代表的 substring 包含了所有 string T 的字元,這時候開始移動 start 來找到最短的 substring
    • 如果目前 start 和 end 代表的 substring,其長度比目前的最小值還短,更新最小值資訊
    • 將 start 目前所指到的字元,在 map 裡對應位置的值加一,要是其值加一後是大於零的,代表該字元同時也是在 string T 裡,這時候要把 count 加一
    • 只要 count 還是等於零,就一直移動 start。因為 count 等於零,就代表目前的 substring 包含 string T 裡面的所有字元
code 如下
cpp

kotlin

沒有留言:

張貼留言