优选算法_判断字符是否唯一_C++

一.题目解析

算法一:哈希表

哈希表储存字母的种类和数量(也可以是bool)

代码实现:

cpp 复制代码
class Solution {
public:
    int hammingWeight(int n) {
        int count=0;
        for(int i=0;i<32;i++)
        {
            if(((n>>i)&1)==1)count++;
        }
        return count;
    }
};

算法二:位图

这里只有26个字母,字符-'a'变成对应的数字(0~26,a~z),1表示出现过,0表示没出现过

通过n=n|(1<<x)将该数插入位图中

代码实现

cpp 复制代码
class Solution {
public:
    bool isUnique(string astr) {
        int n=astr.size();
        if(n>26)return false;//鸽巢原理
        
        int bitmap=0;
        for(auto ch:astr)
        {
             int i=ch-'a';//字母对应数
             if(((bitmap>>i)&1)==1) return false;//判断是否相同
             bitmap|=1<<i;   
        }
        return true;
        
    }
};//位图
相关推荐
风筝在晴天搁浅2 分钟前
手撕归并排序
数据结构·算法·排序算法
摇滚侠3 分钟前
Public Key Retrieval is not allowed
java·数据库·mysql
qeen874 分钟前
【数据结构】二叉树基本概念及堆的C语言模拟实现
c语言·数据结构·c++·
lynnlovemin5 分钟前
C++高精度加减乘除算法详解
开发语言·c++·算法·高精度
计算机学姐6 分钟前
基于微信小程序的宠物服务系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·微信小程序·uni-app·宠物
lst04266 分钟前
Maven 构建命令
java·maven
原来是猿7 分钟前
算法中 cin/cout 超时?聊聊它与 printf/scanf 的性能差异
算法
梅孔立7 分钟前
Aspose.Words Java 表格动态删列、合并列、表头重建、全局字体统一解决方案
java·开发语言·word·aspose·在线编辑
Dxy12393102167 分钟前
js如何根据开始位置结束位置在类表中取对应范围的数据
开发语言·javascript·ecmascript
空中海7 分钟前
第一章:入门篇 — Maven 核心概念与基础使用
java·maven