假设我们有两个字符串s和t。我们必须找到s中最小的子字符串,其中t也是子字符串的子序列。如果该类型的子字符串不存在,我们将返回一个空白字符串,如果有多个最小的子字符串,我们将选择最左边的一个。
因此,如果输入类似于s =“ abcbfbghfb”,t =“ fg”,则输出将为fbg
为了解决这个问题,我们将遵循以下步骤-
N:= S的大小
dp:=用无穷大初始化的大小为N的新列表
对于介于0到N − 1的i
dp [i]:= 1
如果S [i]与T [0]相同,则
对于范围1至T − 1的j
如果S [i]与T [j]相同,则
dp:= dp2
dp2 [i]:= dp [prev_i] +(i − prev_i)
prev_i:=从最后返回T [j − 1]的值
如果prev_i不为null,则
last [S [i]]:= i
最后:=一张新映射
dp2:=一个新的大小为N的列表,并用无穷大初始化
对于0到N范围内的i,执行
m:= dp的最小值
i:=返回dp中包含m的索引
如果m是无穷大,则
返回空白字符串
返回S [从索引i-dp [i] +1到i]
让我们看下面的实现以更好地理解-
class Solution: def solve(self, S, T): INF = float("inf") N = len(S) dp = [INF] * N for i in range(N): if S[i] == T[0]: dp[i] = 1 for j in range(1, len(T)): last = {} dp2 = [INF] * N for i in range(N): if S[i] == T[j]: prev_i = last.get(T[j − 1], None) if prev_i is not None: dp2[i] = dp[prev_i] + (i − prev_i) last[S[i]] = i dp = dp2 m = min(dp) i = dp.index(m) if m == INF: return "" return S[i − dp[i] + 1 : i + 1] ob = Solution() print(ob.solve("abcbfbghfb","fg"))
"abcbfbghfb","fg"输出结果
fbg
我试图从字符串中找到最小的子字符串(包含 set 的所有值) 例如: 因为< code>OxVxT是示例1中最小的子串(包含集合的所有元素),所以我为它编写了代码,但这不是最好的方法,也不适用于所有示例,我没有通过我的代码找到最小的子串,我的代码如下: 我找到所有可能的子字符串索引,然后找到它们之间的距离,并且距离最短的子字符串是字符串中最小的子字符串。我的代码不能处理所有测试用例,也没有给出正确
问题内容: 我想在给定的输入string中找到某个子字符串最后一次出现的位置(或索引)。 例如,假设输入字符串为,子字符串为,则应输出3。 我怎样才能做到这一点? 问题答案: 用途: 另外,请勿将其用作变量名,否则将使内置的阴影变暗。
代码非常简单。它会检查所有字符一次,并替换第一次出现的字符。然而,输入=“aab”失败。我不知道为什么。编程语言是java。 编辑 我改了密码。现在它抛出了一个输入错误 错误: 线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:索引1附近的未关闭组(^at java.util.regex.Pattern.error,Pattern.java:1
本文向大家介绍Python字符串中查找子串小技巧,包括了Python字符串中查找子串小技巧的使用技巧和注意事项,需要的朋友参考一下 惭愧啊,今天写了个查找子串的Python程序被BS了… 如果让你写一个程序检查字符串s2中是不是包含有s1。也许你会很直观的写下下面的代码: 可是这是Python,我们可以利用字符串自带的find()方法,于是可以这样: 悲情的事就在于此,原来Python中的关键字"
本文向大家介绍Python查找最长不包含重复字符的子字符串算法示例,包括了Python查找最长不包含重复字符的子字符串算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python查找最长不包含重复字符的子字符串算法。分享给大家供大家参考,具体如下: 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。例如在“arabcacfr”中,最长的不包含重
问题内容: 我在寻找Python中的方法。 我想要做: 问题答案: 你可以使用in运算符: