嗨,我一直在问Hackerrank这个问题。 我尝试过在python中使用regex。但它在测试用例“1001010001”中失败。 谁能帮忙吗?它的输出为2,但预期输出为3。 (如1001 101 10001)。python实际上是如何处理这个问题的(从算法的角度来看?)在
https://www.hackerrank.com/contests/w33/challenges/pattern-count
import re
text=(raw_input().strip('\n'))
patregex=re.compile(r'1(0)*1')
p=patregex.findall(text)
print(len(p))
正则表达式不计算重叠匹配数。在
但是,您可以轻松地修改代码,以:
所以在这里,当我们找到一个
match
时,我们将尝试从另一个匹配开始并找到上一个匹配的match.end()-1
,直到找不到其他匹配为止。我们这样做直到找不到匹配的。对于每个匹配,我们递增cnt += 1
。在我们可以使用
match.end()-1
,因为每个匹配都以1开头,后跟0或更多0,然后是另一个1。所以我们知道模式只能在最后一场比赛中重新开始。在这种方法还可以节省内存:因为在找到第一个匹配项之后,在查找下一个匹配项时,您可以简单地忘记该匹配项。
findall(..)
方法需要同时将所有匹配项存储在内存中。在可以通过正则表达式和前瞻模式来解决重叠
1
的情况:结果:
^{pr2}$相关问题 更多 >
编程相关推荐