Leetcode 392.判断子序列

题目描述:
Leetcode 392.判断子序列_第1张图片
解题思路一双指针<>

从初始位置开始利用双指针从前向后匹配,若匹配成功则右移慢指针,否则右移左指针。最终如果 i 移动到 s 的末尾,就说明 s 是 t 的子序列。

代码实现

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

解题思路二动态规划<>
自身不熟悉动态规划的做法,此处贴出官方解答
Leetcode 392.判断子序列_第2张图片

代码实现

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        n, m = len(s), len(t)
        f = [[0] * 26 for _ in range(m)]
        f.append([m] * 26)

        for i in range(m - 1, -1, -1):
            for j in range(26):
                f[i][j] = i if ord(t[i]) == j + ord('a') else f[i + 1][j]
        
        add = 0
        for i in range(n):
            if f[add][ord(s[i]) - ord('a')] == m:
                return False
            add = f[add][ord(s[i]) - ord('a')] + 1
        
        return True

# 作者:LeetCode-Solution
# 链接:https://leetcode-cn.com/problems/is-subsequence/solution/pan-duan-zi-xu-lie-by-leetcode-solution/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode,python,#,算法,leetcode,动态规划,指针)