leetcode-392-判断子序列
题目描述:
方法一:双指针 O(N+M) O(1)
class Solution: def isSubsequence(self, s: str, t: str) -> bool: if s == "" and t == "": return True if t == "": return False i, j = 0,0 while i < len(s): if s[i] == t[j]: i += 1 j += 1 if j == len(t) and i < len(s): return False return True
优化:
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
进阶问题解法:动态规划:O(26m+n) O(26m)
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) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。