gpt4 book ai didi

java - 实现一种算法以确定字符串是否具有所有唯一字符

转载 作者:行者123 更新时间:2023-11-30 10:21:14 27 4
gpt4 key购买 nike

请帮助我理解 For..Loop。 if 语句如何在 For 循环语句中工作。我特别关注 if 语句以及以下语句的工作原理:if ((checker & (1 << val)) > 0) return false;
checker |= (1 << val);

/* Assumes only letters a through z. */
public static boolean isUniqueChars(String str) {
if (str.length() > 26) { // Only 26 characters
return false;
}
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;
}

最佳答案

如您帖子下的评论所述,检查器变量用作 26 个值的 boolean 值,每个字母一个。

以下部分将字符转换为0到25之间的十进制表示(26个不同字母的26个可能值)

int val = str.charAt(i) - 'a';

所以 'a' 变为 0,'b' 变为 1 等等。

之后,if 语句通过检查 checker 中的位是否已经出现来检查后面的字母是否已经出现过。字母值位置的变量 val已设置为 1,表示该字母已在字符串中。

这里是一个小演示:

tet

t -> 116 - 97 = 19
e -> 101 - 97 = 4
t -> 116 - 97 = 19

checker: 00000000000000000000000000

first iteration
00000000000000000000000000 <- checker
& 00000000000000000000000001 << 19
___________________________________

00000000000000000000000000
& 00000010000000000000000000
___________________________________
00000000000000000000000000 = 0


second iteration
00000010000000000000000000 <- checker
& 00000000000000000000000001 << 4
___________________________________

00000010000000000000000000
& 00000000000000000000010000
___________________________________
00000000000000000000000000 = 0


third iteration
00000010000000000000010000 <- checker
& 00000000000000000000000001 << 19
___________________________________

00000010000000000000010000
& 00000010000000000000000000
___________________________________
00000010000000000000000000 = 524288 > 0

<< , &|是按位运算符。在您的示例中,<<基本上移动1在左边和&检查是否已经有 1在那个地方。当然,这些是最简单的解释,但这就是您的示例中发生的情况。

它不在示例中,而是在每次迭代结束之前,checker已更新,因此 1 在哪里已经设置在较低的数字,变成设置在 checker .

在第三次迭代中,因为已经有一个1在被检查的地方(在第一次迭代中设置了 1),结果将包含 1在同一位置,因此整个结果数将大于零,这实际上是在 if 语句中检查的。所以如果数字大于0,则表示checker有一个 1设置在val的位置.

您甚至可以在 Wikipedia 上找到有关位运算符的更多有用信息.

正如我所说,我尽可能地简化了问题,这只是一个大概的想法。

关于java - 实现一种算法以确定字符串是否具有所有唯一字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com