leetcode 面试题 01.01. 判定字符是否唯一

实现一个算法,确定一个字符串 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;
    }

 

posted @ 2020-12-22 00:41  和洒江郊  阅读(78)  评论(0)    收藏  举报