Language agnostic 检测O(n)时间和O(1)内存中的字符串中是否存在重复项且没有数据结构

Language agnostic 检测O(n)时间和O(1)内存中的字符串中是否存在重复项且没有数据结构,language-agnostic,duplicates,puzzle,Language Agnostic,Duplicates,Puzzle,问题是确定给定字符串中是否没有任何重复字符。限制条件是字符串仅包含字符a-z(仅小写) 显而易见的解决方案是使用数组(或哈希表)跟踪遇到的字符。但问题是不允许使用数据结构 下面是这个问题的一个解决方案。但我不太明白它是怎么工作的。我可以看到它使用整数的位来跟踪遇到的字符 public boolean isUniqueChars(String str) { int checker = 0; for (int i = 0; i < str.length(); ++i) {

问题是确定给定字符串中是否没有任何重复字符。限制条件是字符串仅包含字符a-z(仅小写)

显而易见的解决方案是使用数组(或哈希表)跟踪遇到的字符。但问题是不允许使用数据结构

下面是这个问题的一个解决方案。但我不太明白它是怎么工作的。我可以看到它使用整数的位来跟踪遇到的字符

public 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)
            return false;
        checker |= (1 << val);
    }
    return true;
}
public boolean isUniqueChars(String str){
int-checker=0;
对于(int i=0;ichecker |=(1您是正确的,它为每个字母设置位。但它首先检查(使用按位和),如果它已经找到当前字母,则它知道字符串不包含唯一的字母。

我将尝试解释。
int checker;
是32位表示法。因为a-z总共是26个字母,所以32位(1个整数类型数据)足以标记所使用的字符。
checker |=(1)