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!
評論