当前位置: 首页 > article >正文

5.1 位运算专题:LeetCode 面试题 01.01. 判定字符是否唯一

1. 题目链接

LeetCode 面试题 01.01. 判定字符是否唯一


2. 题目描述

实现一个算法,确定一个字符串的所有字符是否全部唯一(即没有重复字符)。要求如下:

  • 不使用额外的数据结构(如哈希表)
  • 字符串仅包含小写字母 a-z

示例

  • 输入:"abc" → 输出:true
  • 输入:"aba" → 输出:false

3. 示例分析
  1. 无重复字符
    • "leetcode"false'e'重复)
    • "abc"true
  2. 边界情况
    • 空字符串 ""true
    • 字符串长度超过 26 → false(26 个小写字母最多只能有 26 个唯一字符)

4. 算法思路

核心思想位图法(Bitmask)

  1. 位图表示
    • 使用一个整数 flag 的二进制位表示字符是否出现过。
    • 每个二进制位对应一个小写字母,例如:
      • a → 第 0 位
      • b → 第 1 位
      • z → 第 25 位
  2. 遍历字符串
    • 若当前字符对应的二进制位为 1,说明已重复,返回 false
    • 否则,将该位设为 1,继续检查下一个字符。

优化点

  • 预判长度超过 26:若字符串长度超过 26,直接返回 false(鸽巢原理)。
  • 时间复杂度:O(n),空间复杂度:O(1)(仅需一个整数)。

5. 边界条件与注意事项
  1. 字符串长度
    • 若长度超过 26,直接返回 false
    • 空字符串直接返回 true
  2. 字符范围
    • 题目假设字符均为小写字母,若存在其他字符(如大写字母或符号),需预处理为小写。
  3. 位运算溢出
    • 移位操作 1 << ii 的范围需为 0~25,否则可能导致整数溢出。

6. 代码实现
class Solution {
public:bool isUnique(string astr) {if (astr.size() > 26) return false; // 鸽巢原理优化int flag = 0; // 位图初始化for (char ch : astr) {int i = ch - 'a'; // 计算字符对应的二进制位if ((flag >> i) & 1) { // 判断该位是否为1return false;}flag |= (1 << i); // 将该位设为1}return true;}
};

与其他方法的对比

方法时间复杂度空间复杂度适用场景
位图法O(n)O(1)仅限小写字母
哈希表法O(n)O(26)所有字符类型
数组计数法O(n)O(26)字符范围明确且较小
暴力枚举法O(n²)O(1)极短字符串(n ≤ 10)

关键代码解析

  1. 位运算检查重复

    if ((flag >> i) & 1) // 判断第i位是否为1
    
    • flag 右移 i 位后,与 1 按位与,结果为 1 则说明该位已被占用。
  2. 位图更新

    flag |= (1 << i); // 将第i位设为1
    
    • 1 左移 i 位后,与 flag 按位或,确保第 i 位被标记为已使用。

总结

位图法通过巧妙的位运算,将空间复杂度降至 O(1),同时保持线性时间复杂度。在面对限定字符范围的问题时(如小写字母、数字等),位图法是最优解之一。其核心在于将字符映射到整数的二进制位上,利用位运算的原子性快速判断重复性。实际应用中,需注意字符范围与整数位数的限制(例如,32 位整数最多覆盖 32 种字符)。

相关文章:

5.1 位运算专题:LeetCode 面试题 01.01. 判定字符是否唯一

1. 题目链接 LeetCode 面试题 01.01. 判定字符是否唯一 2. 题目描述 实现一个算法&#xff0c;确定一个字符串的所有字符是否全部唯一&#xff08;即没有重复字符&#xff09;。要求如下&#xff1a; 不使用额外的数据结构&#xff08;如哈希表&#xff09;字符串仅包含小写…...

datawhale组队学习--大语言模型—task4:Transformer架构及详细配置

第五章 模型架构 在前述章节中已经对预训练数据的准备流程&#xff08;第 4 章&#xff09;进行了介绍。本章主 要讨论大语言模型的模型架构选择&#xff0c;主要围绕 Transformer 模型&#xff08;第 5.1 节&#xff09;、详细 配置&#xff08;第 5.2 节&#xff09;、主流架…...

Python虚拟环境:从入门到实战指南

目录 一、为什么需要Python虚拟环境&#xff1f; 二、如何创建Python虚拟环境&#xff1f; 1. 使用venv&#xff08;Python 3.3内置&#xff09; 2. 使用virtualenv&#xff08;第三方工具&#xff09; 3. 使用conda&#xff08;适合数据科学项目&#xff09; 三、虚拟环…...

如何提升 Java 开发能力?

如何提升 Java 开发能力&#xff1f; 要系统提升 Java 开发能力&#xff0c;需从 基础巩固、技术拓展、实战经验、持续学习 四个维度入手。以下是详细的进阶路径和具体建议&#xff1a; 一、夯实 Java 核心基础 深入理解语言特性 必学内容&#xff1a; JVM 原理&#xff1a…...

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型同步与异步同步异步对比同步 I/O 的缺点异步 I/O 的优点 理解异步通知 I/O 模型实现异步通知 I/O 模型WSAEventSelect 函数和通知…...

Qt6相对Qt5的主要提升(AI总结)

我&#xff1a; Qt 6 相对于5 有哪些新功能&#xff1f; Qt 6 相对于 Qt 5 有诸多新功能和改进&#xff0c;以下是主要的新增特性&#xff1a; 1. 架构和核心库的重构 模块化设计&#xff1a;Qt 6 采用了更加灵活的模块化设计&#xff0c;开发者可以按需引入必要的功能模块&a…...

消息队列ActiveMQ、RabbitMQ、RocketMQ、Kafka对比分析和选型

ActiveMQ、RabbitMQ、RocketMQ、Kafka对比分析和选型 四大消息队列详细对比 1. ActiveMQ 核心特性&#xff1a; 基于JMS规范&#xff0c;支持多种协议&#xff08;AMQP、STOPP、MQTT等&#xff09;。提供主从架构&#xff08;Master-Slave&#xff09;和共享存储集群。支持持…...

2025:sql注入详细介绍

先说一个阿里云学生无门槛免费领一年2核4g服务器的方法&#xff1a; 阿里云服务器学生无门槛免费领一年2核4g_阿里云学生认证免费服务器-CSDN博客 SQL注入&#xff08;SQL Injection&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者通过在应用程序的输入参数中注入恶意…...

MyBatis操作数据库进阶——动态SQL

动态 SQL 是根据程序运行时的条件灵活生成不同 SQL 语句‌的技术。它的核心目的是在不修改代码‌ 的前提下&#xff0c;通过条件判断、循环等逻辑&#xff0c;动态拼接 SQL 片段&#xff0c;解决传统 SQL 语句死板、难以应对复杂业务场景的问题。 一、<if> 标签 先来观…...

使用LLama-Factory的简易教程(Llama3微调案例+详细步骤)

引言&#xff1a;一套快速实现 Llama3 中文微调的教程 主要参考&#xff1a;胖虎遛二狗的 B 站教学视频《【大模型微调】使用Llama Factory实现中文llama3微调》 ✅ 笔者简介&#xff1a;Wang Linyong&#xff0c;西工大&#xff0c;2023级&#xff0c;计算机技术 研究方向&am…...

LabVIEW发电平台数据采集系统

本文详细介绍了基于LabVIEW的摇臂式波浪发电平台数据采集系统的设计与实现。通过整合LabVIEW软件与多种传感器技术&#xff0c;本系统能够有效提升数据采集的准确性和效率&#xff0c;为波浪能的利用和发电设备的优化提供科学依据。 ​ 项目背景 随着全球能源需求增长和环境保…...

气象可视化卫星云图的方式:方法与架构详解

气象卫星云图是气象预报和气候研究的重要数据来源。通过可视化技术,我们可以将卫星云图数据转化为直观的图像或动画,帮助用户更好地理解气象变化。本文将详细介绍卫星云图可视化的方法、架构和代码实现。 一、卫星云图可视化方法 1. 数据获取与预处理 卫星云图数据通常来源…...

abaqus 二次开发 No module named ‘abaqusConstants

在 Python 中遇到 “No module named ‘abaqusConstants’” 错误通常意味着 Python 无法找到名为 abaqusConstants 的模块。这可能是由以下几个原因造成的&#xff1a; 拼写错误&#xff1a;首先确认模块名是否正确。通常在 Abaqus 的 Python 环境中&#xff0c;正确的模块名…...

【蓝桥杯】每日练习 Day7

目录 前言 领导者 分析 代码 空调 分析 代码 面包店 分析 代码 前言 今天是第一部分的最后一天&#xff08;主打记忆恢复术和锻炼思维&#xff09;&#xff0c;从明天开始主播会逐步更新从位运算到dp问题的常见题型。 领导者&#xff08;分类讨论&#xff09; 分析 …...

贪心算法(11)(java)加油站

题目&#xff1a;在一条环路上有n个加油站&#xff0c;其中第i个加油站有汽油 gas[i]升.。 你有一辆油箱容量无限的的汽车&#xff0c;从第i个加油站开往第i1个加油站需要消耗汽油 cost[i]升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定…...

Python(4)Python函数编程性能优化全指南:从基础语法到并发调优

目录 一、Lambda性能优化原理1.1 内联执行优势1.2 并行计算加速 二、工程级优化策略2.1 内存管理机制2.2 类型提示增强 三、生产环境最佳实践3.1 代码可读性平衡3.2 异常处理模式 四、性能调优案例4.1 排序算法优化4.2 数据管道加速 五、未来演进方向5.1 JIT编译优化5.2 类型系…...

本地部署Stable Diffusion生成爆火的AI图片

直接上代码 Mapping("/send") Post public Object send(Body String promptBody) { JSONObject postSend new JSONObject(); System.out.println(promptBody); JSONObject body JSONObject.parseObject(promptBody); List<S…...

qiankun微前端的使用

qiankun使用时注意以下几个点 1&#xff0c;子应用项目框架&#xff08;react&#xff0c;vue&#xff09;使用的打包格式需要为 umd 格式 2&#xff0c;子应用项目最好配置不受同源策略&#xff08;跨域&#xff09;的影响 3&#xff0c;子应用最好使用的路由模式是 histor…...

从国家能源到浙江交通投资,全息技术在能源交通领域的创新应用

一、3D全息技术行业应用参数及设计制作要求 全息投影 全息投影技术通过激光器、全息片等设备&#xff0c;将物体的三维信息记录下来&#xff0c;并在特定条件下再现。应用参数包括投影距离、投影面积、投影亮度等。设计制作要求&#xff1a;高清晰度、高亮度、低噪音、稳定性好…...

PageHiOffice网页组件(WebOffice文档控件)开发集成技巧专题一

PageHiOffice网页组件作为最新一代的WebOffice文档控件&#xff0c;这是目前市场上唯一能做到在Chrome等最新版浏览器中实现内嵌网页运行的商用文档控件&#xff0c;是OA及ERP等系统处理各种文档的福音。从发布到完善已经超过3年&#xff0c;不管是功能性还是稳定性都已经有了长…...

【人工智能】机器学习中的评价指标

机器学习中的评价指标 在机器学习中&#xff0c;评估指标&#xff08;Evaluation Metrics&#xff09;是衡量模型性能的工具。选择合适的评估指标能够帮助我们更好地理解模型的效果以及它在实际应用中的表现。 一般来说&#xff0c;评估指标主要分为三大类&#xff1a;分类、…...

本地安装deepseek大模型,并使用 python 调用

首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步&#xff0c;就可以 点击搜索 Models &#xff1a; https://ollama.com/search然后点击下载&#xff1a; 选择后复制: ollama run deepseek-r1:32b例如&#xff1a; 让它安装完成后&#xff1…...

Android:蓝牙设置配套设备配对

一、概述 在搭载 Android 8.0&#xff08;API 级别 26&#xff09;及更高版本的设备上&#xff0c;配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描&#xff0c;而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...

AI知识补全(二):提示工程(Prompting)是什么?

名人说:人生如逆旅,我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(一):tokens是什么? 目录 一、什么是提示工程?二、为什么提示工程如此重要?三、核心提示工程技术1. 少样本学习(Few-Sho…...

Python 变量作用域、global 关键字与闭包作用域深度解析 第三部分

## 三、闭包作用域的存在原因及适用场景 ### 3.1 闭包作用域存在的原因 #### 3.1.1 数据封装与隐藏 闭包可以把数据封装在外部函数的作用域中&#xff0c;只有内部函数能够访问这些数据&#xff0c;这有助于实现数据的隐藏和保护。 python def counter(): count 0 def incre…...

zookeeper使用

下载 官网 链接 1. 2. 然后解压&#xff1a; 启动 先复制一份这个文件&#xff0c; 双击启动 默认占用8080&#xff0c;和Tomcat冲突&#xff0c; 解决方法&#xff1a;链接 然后重启...

【性能优化点滴】odygrd/quill 中一个简单的标记位作用--降低 IO 次数

在 StreamSink 类中&#xff0c;成员变量 _write_occurred 的作用是 跟踪自上次刷新&#xff08;Flush&#xff09;以来是否有写入操作发生&#xff0c;其核心目的是 优化 I/O 性能。以下是详细解析&#xff1a; _write_occurred 的作用 1. 避免不必要的刷新&#xff08;Flush…...

Java面试黄金宝典11

1. 什么是 JMM 内存模型 定义 JMM&#xff08;Java Memory Model&#xff09;即 Java 内存模型&#xff0c;它并非真实的物理内存结构&#xff0c;而是一种抽象的概念。其主要作用是规范 Java 虚拟机与计算机主内存&#xff08;Main Memory&#xff09;之间的交互方式&#x…...

使用BootStrap 3的原创的模态框组件,没法弹出!估计是原创的bug

最近在给客户开发一个CRM系统&#xff0c;其中用到了BOOTSTRAP的模态框。版本是3。由于是刚开始用该框架。所以在正式部署到项目中前&#xff0c;需要测试一下&#xff0c;找到框架中的如下部分。需要说明的是。我用的asp.net mvc框架开发。测试也是在asp.net mvc环境下。 复制…...

【Azure 架构师学习笔记】- Azure Networking(1) -- Service Endpoint 和 Private Endpoint

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Networking】系列。 前言 最近公司的安全部门在审计云环境安全性时经常提到service endpoint&#xff08;SE&#xff09;和priavate endpoint&#xff08;PE&#xff09;的术语&#xff0c;为此做了一些研究储备。 云…...