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