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.
为保持健康,请执行以下递归操作:
说明:
基本情况是,如果我们将原始字符串或子字符串的长度设置为0,则停止并打印原始字符串中子字符串的开头和结尾
如果当前字符串的第一个字母相等,那么我们启动计数器(我们用标志“firstFound”固定开头的“beg”),然后递增直到完成(sub是空字符串/原始字符串为空)
需要考虑的事情/更多解释:
例如,如果您要求子字符串的第一次出现,例如,如果原始字符串是“sububusubulum”,子字符串将等于“sbl”,那么当我们第一次点击“s”时,这意味着它将100%从那里开始,因为如果另一个“sbl”在原始字符串中-那么它必须包含剩余的字母,因此我们可以说它们属于第一个s。(一个可怕的解释,我很抱歉)我想说的是,如果子字符串出现两次,那么不管发生什么,我们都会选择第一次
注意:此函数并不真正关心
sub
-字符串是否包含连续的字母,也不检查字符是否在字符串本身中,因为您说过必须从原始字符串中获取字符。它的优点是,函数可以被赋予多于(或少于)3个字符长的子字符串当我说“原始字符串”时,我指的是
subliminal
(或其他输入)不确定这是否是你的意思。我假设子字符串已经有效,这意味着它包含非连续字母。然后我得到子字符串的第一个和最后一个字母,并使用列表理解创建字符串中所有字母的列表。然后我只需循环遍历这些字母,并保存第一个和最后一个字母出现的位置。如果缺少什么,hmu
有很多不同的方法可以做到这一点
这是一个灵魂
这将返回3,8,您可以更改子字符串的长度,并且假设您只需要第一个匹配
相关问题 更多 >
编程相关推荐