双指针遍历搜索即可
左指针右移,子串变短,01序列变少。右指针右移,子串变长,01序列变多。然后根据当前子串中01序列数量判断移动哪一个指针即可。注意01序列总数变化和当前子串中的0和1的数量相关。
n, k = map(int, input().split())
s = input()
curr_k = 0
first = s.find("0") # 前置1没有意义
curr_0 = 1
curr_1 = 0
i = first
j = first
while j < n:
if curr_k < k:
if j == n-1:
j += 1
continue
if s[j+1] == "0":
curr_0 += 1
else:
curr_1 += 1
curr_k += curr_0
j += 1
elif curr_k > k:
if s[i] == "0":
curr_0 -= 1
curr_k -= curr_1
else:
curr_1 -= 1
i += 1
else:
print(i+1, j+1)
break
else:
print(-1)



京公网安备 11010502036488号