首页 > 代码库 > CC150 1.1 字符串查唯一bit manipulation详解
CC150 1.1 字符串查唯一bit manipulation详解
public boolean isUniqueChars2(String str) { int checker = 0; for (int i = 0; i < str.length(); i++) { int val = str.charAt(i) - ‘a‘; //保证val的值不超过26 if ((checker & (1 << val)) > 0) { return false; } else { checker |= (1 << val);//checker=checker | (1<<val) } } return true; }
位运算&:假设是abcccd这个字符串,扫描a时,val=0=0000 0000 0000 0000 0000 0000 0000 0000
1<<0=0000 0000 0000 0000 0000 0000 0000 0001<<0=0000 0000 0000 0000 0000 0000 0000 0001
checker=0=0000 0000 0000 0000 0000 0000 0000 0000
checker&(1<<val)=
0000 0000 0000 0000 0000 0000 0000 0000 &
0000 0000 0000 0000 0000 0000 0000 0001 =
0000 0000 0000 0000 0000 0000 0000 0000 = 0 所以 checker=checker | (1<<val)=
0000 0000 0000 0000 0000 0000 0000 0000 |
0000 0000 0000 0000 0000 0000 0000 0001 =
0000 0000 0000 0000 0000 0000 0000 0001 = 1
这一步的作用死爸扫描的自负对应为0,1存到32位的int checker里,扫描b是checker=0000 0000 0000 0000 0000 0000 0000 0011,以此类推
扫描到第二个c时0000 0000 0000 0000 0000 0000 0000 0111 &
0000 0000 0000 0000 0000 0000 0000 1000 = 0000 0000 0000 0000 0000 0000 0000 0000
return false
前一种开了boolean[256]这次只用了32位的空间,节省了1/8
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。