当前位置: 首页 > 知识库问答 >
问题:

如何从字符串中找出最小子字符串

孟成化
2023-03-14

我试图从字符串中找到最小的子字符串(包含 set 的所有值)

例如:

Input = 'xTxxOxxVxxOxVxxTxxxOxVxTxxxOxxTxVx'
Set = 'OTV'
Output = OxVxT

Input = 'UresqTcdvavUssTss'
Set = 'UT'
Output = UssT

因为< code>OxVxT是示例1中最小的子串(包含集合的所有元素),所以我为它编写了代码,但这不是最好的方法,也不适用于所有示例,我没有通过我的代码找到最小的子串,我的代码如下:

def Fun(S, T):
    lst=[]
    lst1=[]
    lst2=[]
    for t in T:
        if t not in S: return False
    T = list(T)
    Z= list(T)
    C = list(T)
    for i in range(len(S)):
        if S[i] in T:
            lst.append(i)
            T.remove(S[i])
        if len(T)==0:break
    print (lst)
    U=(max(lst))
    for u in range(U+1,len(S)):
        if S[u] in Z:
            lst1.append(u)
            Z.remove(S[u])
        if len(Z)==0:break
    print (lst1)
    Q = (max(lst1))
    for u in range(Q+1,len(S)):
        if S[u] in C:
            lst2.append(u)
            C.remove(S[u])
        if len(C)==0:break
    print (lst2)
Str = 'xTxxOxxVxxOxVxxTxxxOxVxTxxxOxxTxVx'
Set = 'OTV'
Fun(Str,Set)

我找到所有可能的子字符串索引,然后找到它们之间的距离,并且距离最短的子字符串是字符串中最小的子字符串。我的代码不能处理所有测试用例,也没有给出正确的结果。

共有1个答案

邵博艺
2023-03-14

这运行O(S T),需要python 3.7

def Func(S,T):
    s=set(S)
    d={}
    minLen, minBegin=len(T)+1,len(T)+1
    for i,c in enumerate(T):
        if c in s:
            if c in d:
                del d[c]
            d[c]=i
            if len(d)==len(s):
                for k,v in d.items():
                    if i-v+1<minLen:
                        minLen, minBegin=i-v+1,v
                    break
    if minBegin<len(T):
        return T[minBegin:minBegin+minLen]

print(Func('UT', 'UresqTcdvavUssTss')) #Output = UssT
print(Func('OTV', 'xTxxOxxVxxOxVxxTxxxOxVxTxxxOxxTxVx')) #Output = OxVxT
print(Func('A', 'xTxxOxxVxxOxVxxTxxxOxVxTxxxOxxTxVx')) #Output = None
 类似资料:
  • 我有一个字符串s和一个整数k(子字符串长度),我正在尝试编写函数,这样它就可以找到长度为k的最小和最大的子字符串。并返回一个字符串,其中最小和最大的子字符串与换行符组合在一起。 到目前为止,我用下面的方法解决了这个问题,我编写了相同的代码来查找最小和最大的子字符串,然而,我想用流返回两个子字符串的单行代码。 我非常感谢任何建议,因为我现在正在学习lambda和stream。 那么,我该如何优雅地解

  • 问题内容: 在Objective-C中,我使用了: 但是现在NSBackWardsSearch似乎不存在。谁能为Swift提供等效的代码? 我希望能够在整个字符串中找到字符数。因此,在上面的示例中,它将返回3。 问题答案: 可可框架应该可以在Swift中访问,但是您需要导入它们。尝试导入以访问NSString API。从“将Swift与Cocoa和Objective-C结合使用”指南的“使用Coc

  • 本文向大家介绍找出包含Python中特定字符串的最小子字符串的程序,包括了找出包含Python中特定字符串的最小子字符串的程序的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个字符串s和t。我们必须找到s中最小的子字符串,其中t也是子字符串的子序列。如果该类型的子字符串不存在,我们将返回一个空白字符串,如果有多个最小的子字符串,我们将选择最左边的一个。 因此,如果输入类似于s =“ abcb

  • 问题内容: 我想在给定的输入string中找到某个子字符串最后一次出现的位置(或索引)。 例如,假设输入字符串为,子字符串为,则应输出3。 我怎样才能做到这一点? 问题答案: 用途: 另外,请勿将其用作变量名,否则将使内置的阴影变暗。

  • 我有两根绳子 在两种情况下,我应该删除

  • 我如何在O(N**2)个时间内完成它?