Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,mask[s.charAt(i)]是什么意思?掩码是一个布尔数组_Java_Boolean - Fatal编程技术网

Java,mask[s.charAt(i)]是什么意思?掩码是一个布尔数组

Java,mask[s.charAt(i)]是什么意思?掩码是一个布尔数组,java,boolean,Java,Boolean,我刚开始做破解编码面试的问题。这是第一个问题:实现一个算法来确定字符串是否具有所有唯一字符。如果不能使用其他数据结构,该怎么办? 以下是解决方案: 使用布尔数组跟踪ASCII集中每个可能字符的出现。最初,该数组中的每个值都为false,直到出现相应的字符值。如果该字符值再次出现,则如果数组中的对应值已为true,则返回false。 Time:On,n是字符串的长度。 空格:打开名为mask的数组。 源代码: public class Interview { // Assume ever

我刚开始做破解编码面试的问题。这是第一个问题:实现一个算法来确定字符串是否具有所有唯一字符。如果不能使用其他数据结构,该怎么办? 以下是解决方案: 使用布尔数组跟踪ASCII集中每个可能字符的出现。最初,该数组中的每个值都为false,直到出现相应的字符值。如果该字符值再次出现,则如果数组中的对应值已为true,则返回false。 Time:On,n是字符串的长度。 空格:打开名为mask的数组。 源代码:

public class Interview {

    // Assume every character in string is in ASCII.
    public boolean uniqueChars(String s) {
        boolean[] mask = new boolean[256];
        for (int i = 0; i < s.length(); i++) {
            if (mask[s.charAt(i)])
                return false;
            mask[s.charAt(i)] = true;
        }
        return true;
    }
} 
我无法理解这一点:面具[s.charAti]。我认为s.charAti是一个字符,但不是一个数字,所以我不知道这是如何工作的。我知道这是一个简单的问题,但我找不到直接的答案。希望你们能帮助我。非常感谢。

mask[s.charAti]从索引i处的s获取字符,隐式地将其转换为int,然后在mask数组中的该索引处查找mask中的值。字符的int值不是ASCII,而是UTF-16,因为这就是为什么。代码在注释中提出了一个巨大的假设,即字符串只有ASCII字符,它显然将ASCII字符定义为值小于256的字符;这是扩展的ASCII,ASCII本身只定义小于128的字符。对于小于128的值,ASCII和UTF-16是相同的

您的整个函数都是这样做的:从一个包含所有假条目的数组开始,因为这是布尔[]的默认状态,它循环遍历字符串,并为每个字符查找以前是否见过该字符。如果有,则从函数中返回true,我们已经看到该字符至少出现了两次。如果它以前没有见过字符,它会将数组中的该项设置为true。如果它一直到字符串的末尾都没有返回true,那么它将返回false——该字符串没有重复两次相同的字符


如果代码看到一个int值大于等于256的字符,则会出现ArrayIndexOutOfBoundsException失败,这是完全可能的。

相关:如果您将任何内容(例如,中文)传递给它,这将非常严重地崩溃!计算机中的所有内容都转换为1和0字节。一切都是数字,其他一切都是幻觉。所以char是一个数字,布尔值变成0=false,1=true。甚至对一个对象的引用也是一个数字。它如何将它转换成整数?整数是ASCII码吗?谢谢你的帮助help@hehexiaowangzi:隐式地。不,int不是一个ASCII码,它是一个UTF-16码单元,该码将其视为扩展ASCII码,这不是真的。是的,你帮了我很多。谢谢你的时间和耐心。