entrada = str(input().lower())
replace = "mem".lower()
find = entrada.lower()
count = 0
while (entrada.find(replace) != -1):
entrada = entrada.replace(replace, "", 1)
count +=1
print(count)
不能使用计数,列表或lambda。 我倾向于创建一个从用户接收较低字符串的程序,然后查找,计算和打印子字符串出现的次数。 但我遇到重叠字符串的问题。
示例:string是memem,预期退出是2
答案 0 :(得分:3)
执行此操作的一种方法是使用str.find的第二个参数,该参数指示可选索引以开始在字符串中搜索子字符串。
来自docs:
str.find(sub [,start [,end]])¶返回字符串中的最低索引 其中找到substring sub,使得sub包含在切片中 S [开始:结束。可选参数start和end被解释为 切片表示法。如果未找到sub,则返回-1。
因此,如果我们跟踪变量中找到的last_index
,我们可以在下一个可能的索引中再次开始搜索子字符串。在代码中表达,这是表达式
last_index + 1
。如果last_index
始终为-1,我们将停止搜索子字符串并输出我们的计数:
mystr = 'memem'
mysubstr = 'mem'
count = 0
last_index = -1
while True:
last_index = mystr.find(mysubstr, last_index + 1)
if last_index == -1:
break
count += 1
print(count)
答案 1 :(得分:0)
您可以使用
i = 0
while True:
i = entrada.find(replace, i) + 1
if i:
count += 1
else:
break
然后会在replace
中找到entrada
,递增计数,在replace
中找到entrada[i+1:]
,其中i
是上一个匹配的开头,增量伯爵,并永远重复。