2020年6月9日 星期二

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;
    }
}