【算法】位运算算法——判断字符是否唯一

简介: 【算法】位运算算法——判断字符是否唯一

题解:判断字符是否唯一(位运算算法)

1.题目

题目链接:LINK

2.题解

题解有两种方法,

一是做一个哈希数组,去查重;

二是直接用一个变量每一位来对应表示是否有这个字母即可(位图算法)。

下面仅说位图算法:

3.位图参考代码

class Solution {
public:
    bool isUnique(string astr) 
    {
        if(astr.length() > 26) return false;// 鸽巢原理
        
        int ret = 0;//32个比特位全是0
        for(auto& ch : astr)
        {
            int n = ch - 'a';
            
            // 查重
            if(((ret >> n) & 1) == 1) return false;
            // 加入ret中
            ret = (ret | (1 << n));
        }
        return true;
    }
};

4.细节

鸽巢原理:

这里如果一个string的长度 > 26 且 都为小写字母的话,那么一定有重复的,所以可以不用判断直接返回false。

5.总结

用位图比哈希数组更加节约空间,直接把O(N)的空间复杂度降成了O(1)…


EOF

相关文章
|
4月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
63 0
|
9月前
|
算法
算法思想总结:位运算
算法思想总结:位运算
|
3月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
75 1
|
2月前
|
算法
【算法】位运算合集
/鸽巢原理优化//位图原理//bitMap&0001000只有非0或者0两个结果//说明当前bitMap位是0,那就添加进去}else{//1:把字符串转化为字符数组// //2:把字符扔到hash表中// //获取hash表中x的value值// }else{// }// }
|
6月前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
6月前
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
6月前
|
算法
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
6月前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
6月前
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
6月前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
115 0
算法】位运算——常见位运算基础操作总结