567. Permutation in String
題目網址:https://leetcode.cn/problems/permutation-in-string/
題意:給兩 string
s1
和s2
, 若s2
包含s1
的排列, 則返回true
。否則, 返回false
。
s1
的排列之一是s2
的 substring。注意:substring 為連續的, subsequence 為非連續的
Solution:
想法:利用 Sliding Window, 類似 76. Minimum Window Substring
- 先不斷地增加
right
來擴大窗口- 縮小窗口的時機是窗口大小
≥ s1.size()
時- 當
valid == need.size()
時, 代表窗口中的 substring 為合法的排列注意:這題是「固定長度」的窗口, 因為窗口每次向前滑動時只會移出一個字元, 故可以把內層的 while 改成 if, 其效果是一樣的
class Solution { |
- time:$O(n1 + n2)$ ➔ 其中
n1
、n2
分別為s1
、s2
的長度- $O(n1)$:遍歷
s1
計算need
- $O(n2)$:
s2
中的每個元素最多被遍歷2
次(left
、right
)
- $O(n1)$:遍歷
- space:$O(1)$ ➔
window
、need
長度皆為 $O(26)$
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論