LeetCode 第30題 Substring with Concatenation of All Words【滑動視窗】(Java)
原題地址為: https://leetcode.com/problems/substring-with-concatenation-of-all-words/
要求
給定字串s,和有一個單詞列表words,每個詞長度相等。在s中尋找,包含全部詞,且每個詞只出現一次,沒有任何多餘其他字元的子串。
例 1:
輸入:
s = “barfoothefoobarman”,
words = [“foo”,”bar”]
輸出: [0,9]
0,9分別對應了”barfoor”和”foobar”
例 2:
輸入:
s = “wordgoodgoodgoodbestword”,
words = [“word”,”good”,”best”,”word”]
輸出: []
我的解題思路是這樣的,首先這樣的子串,一定也是words裡面單詞練在一起的某個組合。那麼我們可以先呼叫438題目的函式findAnagrams。這樣就大大減少了選項。
然後,我們從返回的list去檢查,每一個子串,是否包含了words裡面的單詞,所以程式碼也不復雜。
不包含findAnagrams實現的話,包含兩個函式,一個是checkwords,看看一個子串是否包含words裡面的單詞。另外一個函式是結果函式 findSubstring。


這個做起來簡單,但是效能一般,執行需要94ms。問題應該出在checkwords的實現,不過我暫時懶得優化了,畢竟這次主要目的是練習滑動視窗的技巧。
本題程式碼地址為: https://github.com/tinyfool/leetcode/tree/master/src/p0030
本文假設你對滑動視窗概念有所瞭解,如果你對滑動視窗的概念不夠了解,請參看我介紹 滑動視窗的文章,裡面有詳細的解釋 。