【算法】位运算

位运算

位运算总结图


判定字符是否唯一

如何从浅到深的挖入这道题?从常见的哈希表到数组模拟哈希表到用到位图思想,想到了用位图

鸽巢原理对位图进行优化:如果字符串的长度大于26,则一定是有重复的(一共且只有26个英文字母,顶多刚好从a ~ z 全部都过一遍)

代码实现

java 复制代码
	public boolean isUnique(String astr) {
        // 位图 + 鸽巢 / 抽屉原理 (优化)
        int bitMap = 0;
        // 鸽巢 / 抽屉原理(优化)
        // 如果字符串的长度大于26,则一定是有重复的(一共且只有26个英文字母,顶多刚好从a ~ z 全部都过一遍)
        if (astr.length() > 26) return false;

        for (int i = 0; i < astr.length(); i++) {
            int x = astr.charAt(i) - 'a';
            // 先判断字符是否在位图中
            if (((bitMap >> x) & 1) == 1) return false;
            bitMap |= 1;// 把当前字符加入到位图中
            bitMap <<= x;
        }
        return true;
    }
复制代码
保持更新中...
相关推荐
ForDreamMusk1 小时前
批量归一化
人工智能·算法·机器学习
Ivanqhz2 小时前
刚体的自由度
人工智能·算法
KaMeidebaby2 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
Yang_jie_033 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
2301_800895103 小时前
信息安全数学基础复习
算法
爱折腾的小黑牛3 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
Starmoon_dhw3 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
海石4 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
Tisfy4 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石4 小时前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode