115. distinct subsequence leetcode python
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了115. distinct subsequence leetcode python相关的知识,希望对你有一定的参考价值。
Given a string S and a string T, count the number of distinct subsequences of T in S.
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE"
is
a subsequence of "ABCDE"
while "AEC"
is
not).
Here is an example:
S = "rabbbit"
, T = "rabbit"
Return 3
.
This problem is a typical dp problem.. we need to maintain a dp array to find the result by sequence.
here I have two approaches one I need to use O(m.n) space one need to just use O(m) space.
The time complexity is always the same. O(m.n) because we need to travesal the two strings
the first method is to maintain DP[n][m]
code is as follow
class Solution: # @return an integer def numDistinct(self, S, T): dp=[[0 for j in range(len(T)+1)] for i in range(len(S)+1)] for i in range(len(S)+1): dp[i][0]=1 for i in range(1,len(S)+1): for j in range(1,len(T)+1): if S[i-1]==T[j-1]: dp[i][j]=dp[i-1][j-1]+dp[i-1][j] else: dp[i][j]=dp[i-1][j] return dp[-1][-1]
second method saves more space but we need to reversed the order
class Solution: # @return an integer def numDistinct(self, S, T): if len(S)==0: return 0 if len(T)==0: return 1### res=[0 for j in range(len(T)+1)] res[0]=1 for i in range(len(S)): for j in reversed(range(len(T))): if S[i]==T[j]: res[j+1]=res[j]+res[j+1] return res[len(T)]
以上是关于115. distinct subsequence leetcode python的主要内容,如果未能解决你的问题,请参考以下文章
115. Distinct Subsequences(js)
算法: 不同的子序列115. Distinct Subsequences
LeetCode115 Distinct Subsequences