判断字符串是否有重复字符(位运算)

实现一个算法,确定一个字符串 s 的所有字符是否全都不同

解题思路

可以利用一个int mark = 0各个位来保存26个字母的"是否存在"情况
遍历字符串, 取出每个字符, 跟'a'比较算出差值
将 1 位运算左移"上述差值"位得到tmp
将tmp和最上面的mark与运算, 如果等于tmp则说明该字符已经出现过, 直接返回false
如果不等于则说明该字符还没出现, 需要记录, 将mark与tmp做或运算

代码

class Solution {
    public boolean isUnique(String astr) {
        int mark = 0;
        for (int i = 0; i < astr.length(); i++) {
            char ch = astr.charAt(i);
            int offset = ch - 'a';
            int tmp = 1 << offset;
            if ((mark & tmp) == tmp) {
                return false;
            } else {
                mark |= tmp;
            }
        }
        return true;
    }
}

你可能感兴趣的:(判断字符串是否有重复字符(位运算))