Leetcode題解 Python & C#:六月挑戰DAY9 Is Subsequence

給字串 s 和字串 t,找出 s 是否為 t 的子順序。子順序是相對位置不變,但中間可以刪減部分字元。

 這類的題目在LeetCode有不少,但變化性少,只會這個學會了,就能解部分類似的。
依 Follow up 的方式,我猜,要從 s 的組成字元逐一找該字元是否在 t 裡面,但我不是很懂它想表達的意思。
但沒關係,我的解法也是逐一去找的運作模式。
既然子順序的中間可以塞入非配對的字元,那可想成把那些字元拿掉後,剩下的字串跟 s 能全配對那就是 True。
從 t  的左至右搜查,如果匹對到 s[0] ,那就只能目前從 t 剩下的去匹配 s[1] ,中間沒匹配的都是可以拿掉的字元。
當 len(s) == 0 的時候,即為全匹配。如果還有 s 的字元但 t 已經到最後,那就沒有成功匹配。

Python
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
if not s: return True
for i, c in enumerate(t):
if c == s[0]:
return self.isSubsequence(s[1:], t[i+1:])
return False

C#

public class Solution {
public bool IsSubsequence(string s, string t) {
int n = s.Length;
if(n == 0){return true;}
int si = 0;
foreach(char c in t)
{
if(c == s[si])
{
si += 1;
if(si == n){return true;}
}
}
return false;
}
}