计算具有最多k 1&0和0的子串

时间:2015-03-07 21:30:37

标签: string algorithm

给定二进制字符串0和1以及如何找到从索引l到r的子串数,其中l和r在查询(Q)中给出,使得从l到r它具有至少k 1&0和#0。我有一个O(n ^ 2)解决方案,但这里的查询大约是10 ^ 5,所以如何解决这个问题。 例如:给定字符串01110000且k = 2,因此对于l = 2,r = 4答案为5且l = 5,r = 8答案为7.

1 个答案:

答案 0 :(得分:0)

离线O(n + q) - 时间解决方案的简要草图。

按开始和结束索引查询。对于按递增顺序排列的每个职位l,我们可以确定最大r,以使l..r成为有效的子字符串。 r中的l不会减少,因此需要时间O(n)。保留有效子字符串的累积计数。扩展此循环,以便每当我们将r移动到查询的右端点时,我们将累积计数添加到其答案(最初为零),并且当我们将l移动到a的左端点时查询,我们从答案中减去累计计数。查询有一些特殊情况逻辑,它们本身就是有效的子字符串,我将其留作练习。