2014年2月19日 星期三

[leetcode] Minimum Window Substring

http://oj.leetcode.com/problems/minimum-window-substring/
假設S長度N,T長度M。題目要求O(N)。
原本想法是用一個map去存T的char的出現次數,用兩個指標去取一段區間。每次拿到char如果在map裡,對應的次數-1。當map裡面有char的次數大於0時表示還沒有滿足全部T都要出現在substring(start, end)的條件,這時候end++。如果已經滿足了,start++來縮短substring,同時map對應char的次數要加回來。不過這樣判斷成不成功會是O(N*M)因為每次都要去掃整個map。
為了達到O(N),判斷條件有沒有達成要是O(1)。所以改成兩個map,一個是要達成條件,一定要清空的remain,另外一個是如果remain已經清空的話,多的放在spare。這樣判斷remain.isEmpty()是O(1),同時HashMap的get, set那些都是O(1)。

沒有留言: