【问题标题】:new to java - understanding bit operations in practical use [duplicate]java新手-了解实际使用中的位操作[重复]
【发布时间】:2014-09-17 11:42:28
【问题描述】:
//determines if string contains unique characters

public static boolean isUniqueChars(String str) {
    int checker = 0;
    for (int i = 0; i < str.length(); ++i) {
        int val = str.charAt(i) - 'a';
        if ((checker & (1 << val)) > 0)   <--- right here
            return false;
        checker |= (1 << val);
    }
    return true;
}

我所理解的是

【问题讨论】:

    标签: java android


    【解决方案1】:

    该算法有效,因为检查器变成了一个位图,告诉您遇到了哪些字符。

    我想我会用一个例子来解释。假设我们的字符串是'bedb'。 我们从 checker = 0 开始。 然后'b'来了。 val == 1 因为'b' - 'a' == 1

    (1

    checker | 10 = 00 | 10 = 10

    表示我们遇到了b(右二有一个1),没有遇到a。 然后e 来了。 val == 4(1 &lt;&lt; val) 是二进制的 10000

    checker | 10000 = 10 | 10000 = 10010

    很好。现在我们知道我们遇到了eb

    d 之后检查器是11010

    然后b 来了。 (1 &lt;&lt; val)10。而这里(checker &amp; (1 &lt;&lt; val)) 不再为零。

    11010 &amp; 1010。 所以该方法返回 false,因为它找到了之前遇到的字符。

    【讨论】:

      【解决方案2】:

      1) 每个符号在单词中的位置为1,例如:a = 1, b = 10, c = 100, d = 1000 2)检查器保存之前出现的每个符号的位位置(检查器|=(1

      【讨论】:

        猜你喜欢
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 2015-11-02
        • 2011-02-16
        • 1970-01-01
        相关资源
        最近更新 更多