1. 程式人生 > 其它 >每日leetcode-陣列-392. 判斷子序列

每日leetcode-陣列-392. 判斷子序列

分類:字串-子序列

題目描述:

給定字串 s 和 t ,判斷 s 是否為 t 的子序列。

字串的一個子序列是原始字串刪除一些(也可以不刪除)字元而不改變剩餘字元相對位置形成的新字串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。

解題思路1:雙指標

我們初始化兩個指標 i和 j,分別指向 ss 和 t的初始位置。每次貪心地匹配,匹配成功則 i 和 j 同時右移,匹配 ss 的下一個位置,匹配失敗則 j右移,i 不變,嘗試用 t 的下一個字元匹配 s。

最終如果 i 移動到 s的末尾,就說明 ss 是 t 的子序列。

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        
# 雙指標 m,n = len(s),len(t) i = j = 0 while i<m and j<n: if s[i] == t[j]: i += 1 j += 1 return i==m

時間複雜度:O(n+m),其中n 為 s 的長度,m 為 t 的長度。每次無論是匹配成功還是失敗,都有至少一個指標發生右移,兩指標能夠位移的總距離為 n+m。

空間複雜度:O(1)