为了解决python中列出的here问题,我想我应该尝试一个漂亮的小regex来捕获最大的“二进制间隙”(数字的二进制表示中的零链)。在
我为该问题编写的函数如下:
def solution(N):
max_gap = 0
binary_N = format(N, 'b')
list = re.findall(r'1(0+)1', binary_N)
for element in list:
if len(element) > max_gap:
max_gap = len(element)
return max_gap
而且效果很好。然而。。。由于某些原因,它与10000010000000001
(66561
的二进制表示)中的第二组零不匹配。9个零没有出现在匹配列表中,所以这一定是正则表达式有问题-但是我看不到它在哪里,因为它与其他给出的示例都匹配!在
同一位不能包含在两个匹配中。正则表达式匹配
1
,后跟一个或多个0
,并以另一个1
结尾。一旦找到第一个匹配项,您将留下0000000001
,它不是以1
开头的,因此与正则表达式不匹配。在正如@JoachimIsaksson所提到的,如果要匹配两组0,可以使用lookahead来检查最后的{},但不包括在匹配中。
r'1(0+)(?=1)'
。在相关问题 更多 >
编程相关推荐