1 題目描述

這題很easy,就是要找出s是否為t的subsequence。

2 解法

我的想法一開始很簡單,two pointer從同一個起點0出發,如果相同,兩個pointer都往下走一步,如果不同,只有t的pointer往下走一步。如果s的pointer走到底,表示是subsequence,否則不是。

1
2
3
4
5
6
7
8
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
i, j = 0, 0
while i < len(s) and j < len(t):
if s[i] == t[j]:
i += 1
j += 1
return i == len(s)

有另一個寫法也很特別,我以s為主,for迴圈iterate每個char在s裡面的。然後去判斷char是否在t裡面,如果有,就找出該char在t的位置idx,然後t變成t[idx+1:],因為t[:idx]之前已經不需要了。

1
2
3
4
5
6
7
8
def isSubsequence(self, s: str, t: str) -> bool:
for char in s:
if char in t:
idx = t.find(char)
t = t[idx+1:]
else:
return False
return True

3 總結

這題目難,很快就想出來了,只差在怎麼把程式碼寫得漂亮些。