gpt4 book ai didi

java - 按位运算检查字符串是否唯一

转载 作者:行者123 更新时间:2023-11-30 08:47:59 25 4
gpt4 key购买 nike

这是检查输入字符串是否唯一的代码。在第 1 号线正在做什么11:check |=(1<<val)为什么支票的二进制形式如此?

public boolean checkUnique(String str)
{
int check=0;
for(int i=0; i<str.length();i++)
{
int val = str.charAt(i)-'a';
if((check & (1 << val)) >0)
{
return false;
}
check |= (1<<val);
System.out.println("check "+Integer.toBinaryString(check));
}
return true;
}


I/P : "asdfgh"
O/P () :
0
check 1
18
check 1000000000000000001
3
check 1000000000000001001
5
check 1000000000000101001
6
check 1000000000001101001
7
check 1000000000011101001

最佳答案

这段代码看起来像是在检查字符串中的每个字符是否都是唯一的。

int check=0;初始化' check ' 与 0 ;

int val = str.charAt(i)-'a'; ASCII 字符的最大值为 127,减去 'a' 为 97,给出 0 - 30 之间的值; [注意,这个函数似乎只能检查大于或等于 'a' (97) 的字符,否则,val 可能会被分配一个负值,这对后面的移位操作没有意义]。

对于第一次迭代,“if((check & (1 << val)) >0)”将始终为 false,0 & 与任何 int 仍将是 0;

然后“check |= (1 < < val);”行左移 0x01,位数由“val”指定。例如,如果 val = 3,(1 << val) 将被评估为 0x08。 0 按位或与 0x08 将给“检查”值 0x08;

对于前面的迭代,每次都会生成一个新的“val”,并且“if”子句使用按位与检查“val”是否已经存在。如果存在,则返回带有 false 的函数,否则,将新的“val”“记录”到“check”中并继续下一次迭代。当循环结束时,返回 true。

关于java - 按位运算检查字符串是否唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173599/

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