在位串中查找最长的零序列

时间:2017-04-23 15:30:04

标签: java string binary time-complexity logarithm

给定一个类似" 0001100001"的字符串,我需要找到最长零序列的长度(示例中为4)。

算法应该在O(log(b))时间内执行,其中b是字符串的长度。

我听说过,我必须以某种方式向左移位,以达到所需的复杂度,但我不知道为什么......

我只知道如何通过迭代字符串在线性时间内完成它。

如何获得对数时间?

1 个答案:

答案 0 :(得分:-2)

由于数字将以字符串形式给出,我们可以使用

解析数字
Integer.parseInt(String,Base)

如果我们传递说64这是二进制的1000000并且最长的0长度是6,则while循环应该运行log2(64),这是6,那么这个解决方案应该是您正在寻找的。请检查以下解决方案

public class CountZeroes {
private static long getZeroes(String s) {
    int x = Integer.parseInt(s,2);
    long count = 0, maxSoFar = 0;
    while (x > 0) {
        System.out.println("Running");
        if ((x & 1) == 1) {
            if (count > maxSoFar) {
                maxSoFar = count;
            }
            count = 0;
        } else {
            count += 1;
        }
        x = x >> 1;
    }
    return maxSoFar;
}

public static void main(String[] args) {
    System.out.println(getZeroes("10000"));
    System.out.println(getZeroes("100000"));
    System.out.println(getZeroes("1000000"));
}
}

我已经为16,32和64运行了这个程序,它在log(n)时间内工作,因为在这种情况下没有按字符解析字符,并且也使用了按位运算符。如果可以,请检查一次。

由于