30. Substring with Concatenation of All Words
題目網址:https://leetcode.cn/problems/substring-with-concatenation-of-all-words/
題意:給一 string
s
和一些長度相同的單字words
。返回s
中恰好可以由words
中所有單字串聯而成的 substring 之起始位置。注意:substring 要與
words
中的單字完全相同, 中間不可參雜其他 char, 而單字串聯的順序可以是任意的。
Solution:
想法:利用 Sliding Window
- 由於單字串聯的順序可以是任意的, 故利用
freqs
來記錄words
中每個單字的出現次數- 以
i
為起點, 往後取wordsNum
個單字
- 用
cur
來記錄當前 substring 中每種單字的出現次數- 每個
word
的開頭 =i + j * wordLen
, 其中j
表示以i
為起點目前取到第幾個單字- 若
word
不存在於freqs
中, 則代表當前 substring 不符合
➔ 故i
往下一個嘗試- 若
word
在cur
中的次數 > 該word
在freqs
中的次數, 則代表當前 substring 不符合
➔ 故i
往下一個嘗試- 若
j == wordsNum - 1
, 則代表以i
為起點往後取的每個word
都存在於words
中
總共取了wordsNum
個word
, 且每個word
皆沒超過freqs
中對應的個數
➔ 代表每個word
都恰好取了freqs[word]
次
class Solution { |
- time:$O(n \cdot wordsNum \cdot wordLen)$ ➔ 每次以
i
為起點, 去取wordsNum
個 word, 而每個 word 長度為wordLen
- space:$O(wordsNum \cdot wordLen)$ ➔
freqs
保存所有 word
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論