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

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

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

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月前
|
算法
算法思想总结:位运算
算法思想总结:位运算
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
51 1
|
28天前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
28天前
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
28天前
|
算法
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
28天前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
28天前
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
28天前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
|
3月前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
24 1
|
3月前
|
算法 Java
Java数据结构与算法:位运算之位移操作
Java数据结构与算法:位运算之位移操作