092-判断子序列
给定字符串S和T,判断S是否是T的子序列。
字符串的子序列是通过从原始字符串中删除一些(或不删除)字符而不改变剩余字符的相对位置而形成的新字符串。(例如,‘ace’是‘abcde’的子序列,而‘AEC’不是)。
高级:
如果有大量的输入S,叫做S1、S2、Sk,其中k=10亿,你需要依次检查它们是否是T的子序列。在这种情况下,您将如何更改代码?
谢谢:
特别感谢@pbrother添加了这个问题并创建了所有测试用例。
例1:
输入:s='abc ',t='ahbgdc '
输出:真
例2:
输入:s='axc ',t='ahbgdc '
输出:假
提示:
0=s .长度=100
0=长度=10^4
两个字符串都只包含小写字符。
资料来源:LeetCode
链接:https://leetcode-cn.com/problems/is-subsequence
参考:
https://leet code-cn.com/problems/is-subseries/solution/Dai-ma-sui-Xiang-Lu-Dai-ni-Xue-tou-dpzi-knntf/
python
# 0392.判断子序列
类别解决方案:
def isSubsequence(self,s:字符串,t:字符串)- bool:
'''
动态规划,编辑距离,时空O(n*m)
1.确定dp和下标
-dp[i][j],下标i-1结尾的S串,下标j-1结尾的T串。相同的子序列长度是dp[i][j]
2.确定重复公式
-如果s [I-1]=t [j-1],则在t中找到的字符也会出现在s中,dp[i][j]=dp[i-1][j-1] 1。
-如果s[i-1]!=t[j-1],相当于删除t中的字符并继续匹配,dp[i][j]=dp[i][j-1]
初始化
- dp[][]=0
4.遍历顺序
外层为S,内层为t。
:参数s:
:参数t:
:return:
'''
DP=[[0]*(len(t)1)for _ in range(len(s)1)]
对于范围(1)中的I,len(s) 1):
对于范围(1)中的j,len(t) 1):
if s[i-1]==t[j-1]:
dp[i][j]=dp[i-1][j-1] 1
else:
dp[i][j]=dp[i][j-1]
if DP[-1][-1]==len :
返回真
False返回
golang
包动态编程
//动态规划
函数问题序列字符串
DP :=make([][][]int,len(s) 1)
对于i :=范围dp {
dp[i]=make([]int,len(t) 1)
}
对于I :=1;i=len我
对于j :=1;j=len(t);j {
if s[i-1]==t[j-1] {
dp[i][j]=dp[i-1][j-1] 1
} else {
dp[i][j]=dp[i][j-1]
}
}
}
if dp[len(s)]
返回真
}
返回false
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/134429.html