实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:
输入: s = "abc"
输出: true
限制:
0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分。
思路:不使用额外的数据结构,可以利用位运算。
这里可以以a为基准,对比字符串中每个字符与'a'的差值。先定义一个long类型变量allChar,8个字节共64位(可以认为是64个0),
每一位可以代表一个字符与'a'的差值,差值是几allChar的第几位就是1,然后进行位运算&,如果结果不是0,就代表之前有同样的差值,也就是值重复了
比如保存字符串是否存在'd','d'-'a' 差值是3,那么就是 000···01000,allChar与这个值&运算,若为0,
代表这个距离第一次出现,则将allChar对应位变为1,类推就行
public boolean isUnique(String astr) {
long allChar=0;
for (char c : astr.toCharArray()) {
long cl=1<<(c-'a');
if ((cl & allChar)>0){
return false;
}else {
allChar+=cl;
}
}
return true;
}