给定一个二进制字符串。如何在字符串的某个范围内查找“010”的出现。
例如,我有字符串"0100110"。如果给定的范围是3 7(基于 1 的索引),那么输出将为4。我找不到任何更快的方法来解决它。
在尝试这个时,我可以在O(N)复杂度中解决它。方法是 - 首先我指出所有“1”在一定范围内的位置,并使用这些位置我将计算来回“0”的数量。然后将后面找到的“0”数乘以单个“1”与第四次找到的“0”数。然后将一定范围内的每个'1'的乘积相加。
对于给定的示例,“1”在范围内的位置是{5, 6}。现在对于索引5,我前后的“0”数分别为2和1。所以我们可以让子序列"010"是2。同样对于索引6我们也得到答案是2。总共我们可以使子序列“010”总共是4次。
但是当我们对给定字符串有一定范围的Q查询时,我的方法很容易达到时间复杂度O(N 2 )。我尝试了很多,但未能找到优化它的方法。任何人都可以用一种小于O(N 2 )复杂度的方法来帮助我吗?顺便提一下时间限制应该是1秒。如果您提供伪代码,那将是一个加号。
〜提前谢谢。