当前位置: 首页 > 面试题库 >

说明使用位向量确定所有字符是否唯一

罗韬
2023-03-14
问题内容

我对位向量如何实现此功能感到困惑(对位向量不太熟悉)。这是给出的代码。有人可以引导我完成这个吗?

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) return false;
        checker |= (1 << val);
    }
    return true;
}

特别是,这是checker怎么做的?


问题答案:

int checker在这里用作位存储。整数值中的每个位都可以视为一个标志,因此最终int是一个位数组(标志)。代码中的每一位都说明是否在字符串中找到带有位索引的字符。您可以出于相同的原因而不是使用位向量int。它们之间有两个区别:

  • 大小int具有固定大小,通常为4个字节,这意味着8 * 4 = 32位(标志)。位向量通常可以具有不同的大小,或者应在构造函数中指定大小。

  • API 。使用位向量,您将更容易阅读代码,可能是这样的:

vector.SetFlag(4, true); // set flag at index 4 as true

因为int您将具有较低级别的位逻辑代码:

checker |= (1 << 5); // set flag at index 5 to true

也可能int会快一点,因为带位的操作级别很低,可以按原样由CPU执行。BitVector允许编写更少的加密代码,而它可以存储更多的标志。

供将来参考:位向量也称为bitSet或bitArray。这是针对不同语言/平台的此数据结构的一些链接:

  • CPP:位集
  • Java:BitSet
  • C#:BitVector32和BitArray


 类似资料:
  • 问题内容: 上下文:我是CS n00b,正在通过“破解编码面试”来完成自己的工作。第一个问题要求“实施一种算法以确定字符串是否具有所有唯一字符”。我的(可能是幼稚的)实现如下: 作者建议以下实现: 是什么使作者的实现比我的更好(FWIW,作者的解决方案是在Java中,我将其转换为Python -我的解决方案是无法在Java中实现的解决方案)吗?或者,更一般而言,解决该问题需要什么?我采用的方法有什

  • 我正在尝试将嵌套列表结构转换为DataFrame。该列表类似于以下内容(它是来自解析的JSON的序列化数据,使用httr包读取)。 编辑:我最初的示例数据太简单了。实际数据是不完整的,这意味着并非每个对象都存在所有变量,并且一些列表元素是空的。我编辑了数据来反映这一点。

  • 我在练习面试问题,其中一个问题是:“实现一个算法来确定字符串是否具有所有唯一的字符”。 但我的问题是:如果我们假设string可以包含象形文字符号或任何东西(代码点大于u+ffff...?),那么该如何解决。 所以,如果我理解的正确,我可以很容易地想到解决方案,如果给定的字符串包含的字符属于从u+0000到u+ffff的字符集--它们可以转换成16位char,但如果我遇到一个字符的代码点大于u+f

  • 问题内容: 我编写了两个简单的函数来确定字符串是否是回文。我以为它们是等效的,但是2不起作用。为什么是这样? 1个 2 问题答案: 不会创建字符串,而是创建“反向”对象: 因此,字符串不等于object 。为了使它起作用,您需要确保实际评估了该对象: 所述插入件在每个字符串中的字符,并且这导致反转串之间正在变成一个字符串对象。

  • 我在找一个算法(或者其他什么方法)来确定一个给定的加权图在O(ElogV)中是否有唯一的MST(最小生成树)? 我对体重一无所知(如体重(e1)!= weight(e2)),如果该图只有一个唯一的MST,则算法返回True,否则返回False。 我首先使用 Kruskal 的算法,并检查 find-set(u)==find-set(v) 是否因此在 MST 中有一个圆圈,但这种方式并没有涵盖我认为

  • 问题内容: 如何检查Oracle中所有字段是否唯一? 问题答案: 如果它们的出现次数大于一(即它们不是唯一的),这将返回所有myColumn值以及它们的出现次数。 如果此查询的结果为空,则此列中具有唯一值。