问题是要创建一个字符串,从字符串中取出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是第8个字母。
我也不知道如何使代码在不改变代码的情况下为长度不超过3个字符的子字符串工作。
发布于 2021-01-09 20:28:09
为了健康而反复发作:
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-string是否包含连续的字母,也不检查字符串本身中是否有字符,因为您说过必须从原始字符串中给出字符。它的积极之处在于,函数可以被赋予大于(或小于)3个字符的长子字符串。
当我说“原始字符串”时,我指的是subliminal (或其他输入)
发布于 2021-01-09 20:00:20
有很多不同的方法可以做到,
这是一个灵魂,
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,并且可以更改子字符串的长度,并且假设只需要第一次匹配。
https://stackoverflow.com/questions/65646800
复制相似问题