有人可以热烈地确定该字符串是否具有所有唯一字符而没有任何其他数据结构吗?

问题描述

我不熟悉任何ASCII规则或字符串ASCII表示形式。我看过《破解编码面试》一书,但无法理解字符串最多只能有256个字符表示形式。怎么可能,有人可以解释它,并以尽可能简单的解释帮助解决问题。

这是问题:

实施一种算法来确定一个字符串是否具有唯一性 字符。如果您无法使用其他数据结构怎么办

谢谢!

解决方法

绝对没有必要限制自己使用256个唯一字符来解决此问题。

这是一个简单的算法:

  1. 首先,考虑字符串不是java.lang.String,而是考虑字符数组。
  2. 按顺序排列此字符数组。这需要额外的0空间和O(nlogn)时间。
  3. 从索引1(第二个字符)开始,从前到后遍历char数组。对于每个索引,检查找到的字符是否等于在上一个索引中找到的字符。如果答案是肯定的,请立即返回,然后回答否。如果最后没有成功,请返回true(该字符串包含唯一字符)。

运行时特征为O(n logn),不需要额外的空间。尽管您确实弄乱了输入。

现在,在Java中这有点棘手; java.lang.String个实例是不可变的。您无法修改它们,因此无法执行步骤2(就地排序)。您必须通过yourString.toCharArray()进行char []复制,然后才能编写此算法。这是对字符串的有意限制,而不是基本限制。

但是,如果要遵循不能以任何方式修改输入的规则,您就不能建立任何新的数据结构,这仍然是可能的,并且仍然绝对不需要“字符串只能从256个字符的平面中选择”。只会慢得多,慢得多:

  1. 遍历每个字符。 i =角色的位置。
  2. 遍历所有其他字符(从i + 1到末尾)。
  3. 比较两个位置的字符。如果相等,则返回false。
  4. 如果最后,请返回true。

运行时特征为O(n ^ 2)(icky),不需要额外的空间,并且不会修改任何数据。

这256个因素根本不算其中的任何一个。

但是,问题是,很多 代码和示例错误地将“字节序列”和“字符串”(如字符序列)的概念混为一谈,对它们进行了处理所有的“就像一个袋子或数字”。到那时,如果方程式中包含Unicode字符或字符集编码因子,则会发生各种复杂情况。

正确编写的代码知道chars是chars,bytes是字节,chars从不字节,bytes从来都不是chars,并且上一次每一次,您始终总是始终指定哪种编码, 。如果这样做,您将永远不会有任何问题。但是我想你的教授不想让你担心吗?我不知道-愚蠢的限制,对这个问题无关紧要。

,

这是因为ASCII表使用8位,所以最多有2 ^ 8个可能的字符组合。实际上,因为第一位用于存储大小,所以不是256,而是255。