寻找最小窗口子串

2024-09-30 16:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是要创建一个字符串,从字符串中提取3个非连续字符,并将其放入子字符串中,然后打印第一个字符和最后一个字符

str="subliminal"
sub="bmn"

n = len(str)-3

for i in range(0, n):
    print(str1[i:i+4])
    if sub1 in str1:
        print(sub1[i])

这应该打印3到8,因为b是第三个字母,n是第八个字母

我也不知道如何使代码在不改变代码的情况下对长度不超过3个字符的子字符串起作用


Tags: 字符串代码inforlenif字母range
3条回答

为保持健康,请执行以下递归操作:

def minimum_window_substring(strn, sub, beg=0, fin=0, firstFound=False):

    if len(sub) == 0 or len(strn) == 0:
        return f'From {beg + 1} to {fin}'
    elif strn[0] == sub[0]:

        return minimum_window_substring(strn[1:], sub[1:], beg, fin + 1, True)

    if not firstFound:
        beg += 1
    return minimum_window_substring(strn[1:], sub, beg, fin + 1, firstFound)

说明:

基本情况是,如果我们将原始字符串或子字符串的长度设置为0,则停止并打印原始字符串中子字符串的开头和结尾

如果当前字符串的第一个字母相等,那么我们启动计数器(我们用标志“firstFound”固定开头的“beg”),然后递增直到完成(sub是空字符串/原始字符串为空)

需要考虑的事情/更多解释:

例如,如果您要求子字符串的第一次出现,例如,如果原始字符串是“sububusubulum”,子字符串将等于“sbl”,那么当我们第一次点击“s”时,这意味着它将100%从那里开始,因为如果另一个“sbl”在原始字符串中-那么它必须包含剩余的字母,因此我们可以说它们属于第一个s。(一个可怕的解释,我很抱歉)我想说的是,如果子字符串出现两次,那么不管发生什么,我们都会选择第一次

注意:此函数并不真正关心sub-字符串是否包含连续的字母,也不检查字符是否在字符串本身中,因为您说过必须从原始字符串中获取字符。它的优点是,函数可以被赋予多于(或少于)3个字符长的子字符串

当我说“原始字符串”时,我指的是subliminal(或其他输入)

不确定这是否是你的意思。我假设子字符串已经有效,这意味着它包含非连续字母。然后我得到子字符串的第一个和最后一个字母,并使用列表理解创建字符串中所有字母的列表。然后我只需循环遍历这些字母,并保存第一个和最后一个字母出现的位置。如果缺少什么,hmu

sub = "bmn"
str = "subliminal"

first_letter = sub[0]
last_letter = sub[-1]

start = None
end = None

letters = [let for let in str]

for i, letter in enumerate(letters):
    if letter == first_letter:
        start = i
    if letter == last_letter:
        end = i

if start and end:
    print(f"From %s to %s." % (start + 1, end + 1)) # Output: From 3 to 8.

有很多不同的方法可以做到这一点

这是一个灵魂

import re 
def Func(String, SubString):
    patt = "".join([char + "[A-Za-z]" + "+" for char in sub[:-1]] + [sub[-1]])
    MatchedString = re.findall(patt, String)[0]
    FirstIndex = String.find(MatchedString) + 1
    LastIndex = FirstIndex + len(MatchedString) -1 
    return FirstIndex, LastIndex
string="subliminal"
sub="bmn"
FirstIndex, LastIndex = Func(string, sub)

这将返回3,8,您可以更改子字符串的长度,并且假设您只需要第一个匹配

相关问题 更多 >