如果我需要检查字符串是否有唯一字符,我理解如果我们正在考虑Ascii表中的字符,那么它们将有128个.
但是,为什么我们需要创建一个大小为256的布尔数组来保存128个字符以检查元素是否在字符串中至少存在一次?大小128的布尔数组不应该足够吗?
以下是"Cracking the Coding Interview"一书的引用:
if (str.length() > 128) return false;
boolean[] char_set = new boolean[256]; //which is strange since it clearly says over 128 its false
Run Code Online (Sandbox Code Playgroud)
.....
MOH*_*RMA 20
基本上,我们只使用128个字符,主要用于程序期间.但ASCII表中的字符总数为256(0到255).0到31(总共32个字符)被称为ASCII控制字符(字符代码0-31).32到127个字符称为ASCII可打印字符(字符代码32-127).128到255被称为扩展ASCII码(字符代码128-255).
检查参考:http://www.ascii-code.com/
QWERTY(ENGLISH)键盘中没有大多数扩展的ASCII字符,所以这就是原因,作者在"Cracking the coding interview"一书中占了128个字符.
小智 14
不,有256个ASCII字符.这包括标准ASCII字符(0-127)和扩展ASCII字符(128-255).
欲了解更多信息.请参阅:http: //www.flexcomm.com/library/ASCII256.htm
Many people these days use the term "ASCII" in a sloppy fashion to describe ISO-8859-1 (also known as Latin-1), a character set that includes the [32 .. 126] printable-character values in the old-timey ASCII character set and also values in the range [128..255]. Latin-1 does a reasonably good job of covering Western European languages, whereas ASCII is limited to the non-accented characters used in basic English.
ASCII还包括[0-31]和127范围内的控制字符.这些字符不代表可打印字符(尽管unicode在这些位置提供字符).它们是返回,换行,制表符,ctrl-c,换页等.其中一些是电传和电传机器的旧时代的延续.
请注意纸带如何在每帧中有八个位位置.这些是ASCII/Latin-1的位."删除"又称Rubout是127或0111 1111.为什么?因为可以打出磁带上的所有七个孔,所以擦掉一个角色.
这可能解释了某人使用256位数组来制表那种字符集中的文本的建议.
我相信在同一函数中使用 128 和 256 是该书版本中的一个错误。在较新的第 6 版(2016 年)中,代码示例指出:
if (str.length() > 128) return false;
boolean[] char_set = new boolean[128];
Run Code Online (Sandbox Code Playgroud)
作者添加了评论:
假设 256 个字符就可以了。扩展 ASCII 就是这种情况。
因此,对于这本书的练习,请使用128或256,而不是两者都使用。