如何修复此代码以识别重叠字符串?

时间:2015-04-24 17:44:21

标签: python string substring overlapping

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

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是上一个匹配的开头,增量伯爵,并永远重复。