【问题标题】:How to find minimum substring out of string如何从字符串中找到最小子字符串
【发布时间】:2021-06-11 17:44:31
【问题描述】:

我正在尝试从字符串中找到最小的子字符串(包含集合的所有值)

例如:

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

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

因为OxVxT 是 example-1 中最小的子字符串(包含 Set 的所有元素),我已经为它编写了代码,但它不是最好的方法并且不适用于所有示例,我没有找到最小的通过我的代码子串,我的代码如下:

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)

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

【问题讨论】:

  • 请再举几个例子,比如输入和预期输出。
  • @Eddie 我更新了示例,输入:xHxxRxxxxxHxRx ,设置:'HR' 输出:HxR
  • 尝试在Code Review 提出这个问题。您将在那里获得对代码的详细审查..

标签: python python-3.x string algorithm substring


【解决方案1】:

这运行 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2019-03-25
    • 2018-11-24
    • 2014-08-23
    • 2023-03-28
    • 2016-09-14
    • 2021-03-19
    相关资源
    最近更新 更多