2. 遍历字符串数组,记当前字⺟在字⺟表中的顺序为w,则将 s 的第w位标记为1,若第w位已经被标记为1,则返回 false ;
3. 遍历结束未发现重复字⺟则为真.
标记第w位: 在第w位上加1,相当于变量 s 加上 2^(w-1) 。这里可以利用位运算中的左移运算符,一个二进制数字左移⼀位相当于与2相乘⼀次,则 2^(w-1) 可以表示为 1<<(w-1) (1与2相乘w-1次)。
判断第 w 位是否已经被标记: 这里利用 & 运算符,记 u=1<<(w-1) ,若 s&u 为0,则表⽰第w位还未被标记,否则第w位已经被标记过。例如:100100&100=100,表示前⼀个数第三位被标记,100010&100=0,表示前⼀个数第三位未被标记。
bool isUnique(char* astr){int i =0;//定义变量⽤来标记int s =0;while(astr[i]){//在这⾥定义u直接表⽰为左移后的结果//astr[i]-'a'即为astr[i]在字⺟表中的顺序-1,即上⾯所说的w-1int u =1<<(int)(astr[i]-'a');//若未被标记则标记此位,即s加上u;if((u&s)==0) s+=u;//若之前已经被标记,则返回false;elsereturn false;
i++;}//遍历结束不存在重复则返回truereturn true;}