news 2026/5/4 12:16:25

01.01、判定字符是否唯一

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
01.01、判定字符是否唯一

01.01、[简单] 判定字符是否唯一

1、题目描述

实现一个算法,确定一个字符串s的所有字符是否全都不同。

在这一题中,我们的任务是判断一个字符串s中的所有字符是否全都不同。我们将讨论两种不同的方法来解决这个问题,并详细解释每种方法的实现过程。

2、方法一:使用哈希表计数

2.1、思路解析

我们可以利用一个哈希表(数组)来记录字符串中每个字符的出现次数。具体步骤如下:

  1. 字符数判断:如果字符串的长度超过 26,那么肯定有重复字符,因为只有 26 个小写字母。
  2. 哈希表初始化:创建一个长度为 26 的数组hash,用于记录每个字符的出现次数。
  3. 遍历字符串:对于字符串中的每个字符,将对应的哈希表位置加 1。
  4. 重复字符检测:在遍历过程中,如果某个字符的出现次数大于 1,直接返回false
  5. 返回结果:遍历结束后,如果没有发现重复字符,返回true
2.2、代码实现
class Solution { public: bool isUnique(string astr) { // 如果字符串长度超过 26,必然有重复字符 if (astr.size() > 26) { return false; } // 初始化一个哈希表,长度为 26,对应 26 个字母 int hash[26] = {0}; // 遍历字符串中的每个字符 for (const auto& ch : astr) { // 将字符转换为相应的索引位置 hash[ch - 'a']++; // 如果某个字符的计数大于 1,则返回 false if (hash[ch - 'a'] > 1) { return false; } } // 如果没有发现重复字符,返回 true return true; } };
2.3、代码详解

3、方法二:使用位图优化

3.1、思路解析

第二种方法使用了位图(bit vector)来优化空间复杂度。这种方法的核心思想是使用一个整数的位来表示字符是否出现过。具体步骤如下:

  1. 字符数判断:与方法一相同,首先判断字符串长度是否超过 26。
  2. 位图初始化:使用一个整数bitMap来表示字符出现情况,初始值为 0。
  3. 遍历字符串:对于字符串中的每个字符,检查bitMap中相应的位置是否已经设置。
  4. 重复字符检测:如果bitMap中相应的位置已经设置过,返回false。否则,将该位置设置为 1。
  5. 返回结果:遍历结束后,如果没有发现重复字符,返回true
3.2、代码实现
class Solution { public: bool isUnique(string astr) { // 利用鸽巢原理来做的优化,如果字符串长度超过 26,必然有重复字符 if (astr.size() > 26) return false; // 使用位图(bit vector)来记录字符出现情况 int bitMap = 0; // 遍历字符串中的每个字符 for (const auto& ch : astr) { int i = ch - 'a'; // 将字符转换为相应的位位置 // 判断当前字符是否已经在 bitMap 中出现过 if (((bitMap >> i) & 1) == 1) return false; // 如果已出现,返回 false // 将当前字符加入到 bitMap 中 bitMap |= 1 << i; } // 如果没有发现重复字符,返回 true return true; } };
3.3、代码详解

4、总结

这两种方法都可以有效地判断一个字符串中的字符是否全都不同。方法一使用了哈希表,代码直观易懂,而方法二使用了位图优化,节省了空间。如果字符串长度超过 26,直接返回false,因为小写字母只有 26 个,因此这是一种基于鸽巢原理的优化。选择哪种方法取决于具体的需求和优化目标。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 12:12:28

游戏性能革命:DLSS版本智能管理全攻略

游戏性能革命&#xff1a;DLSS版本智能管理全攻略 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 想要免费提升游戏帧率体验吗&#xff1f;DLSS版本管理工具为您带来游戏性能优化的全新解决方案。通过一键切换功能&…

作者头像 李华
网站建设 2026/5/4 12:06:48

Hyper-V硬件直通实战指南:3步实现虚拟化性能突破200%

Hyper-V硬件直通实战指南&#xff1a;3步实现虚拟化性能突破200% 【免费下载链接】DDA 实现Hyper-V离散设备分配功能的图形界面工具。A GUI Tool For Hyper-Vs Discrete Device Assignment(DDA). 项目地址: https://gitcode.com/gh_mirrors/dd/DDA DiscreteDeviceAssig…

作者头像 李华
网站建设 2026/5/4 12:06:48

Apollo Save Tool:PS4存档管理的终极解决方案

Apollo Save Tool&#xff1a;PS4存档管理的终极解决方案 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 Apollo Save Tool 是一款专为 PlayStation 4 设计的开源存档管理工具&#xff0c;它彻底改变了玩…

作者头像 李华
网站建设 2026/5/4 12:03:39

在 Taotoken 控制台中管理 API 密钥与查看审计日志的操作体验

在 Taotoken 控制台中管理 API 密钥与查看审计日志的操作体验 1. API 密钥管理界面概览 Taotoken 控制台的密钥管理模块采用分层设计&#xff0c;主界面左侧导航栏设有独立的「API 密钥」入口。点击进入后&#xff0c;顶部选项卡分为「活跃密钥」与「已禁用密钥」两个视图&am…

作者头像 李华
网站建设 2026/5/4 12:01:38

gh_mirrors/tem/templates最佳实践:10个提升团队文档效率的技巧

gh_mirrors/tem/templates最佳实践&#xff1a;10个提升团队文档效率的技巧 【免费下载链接】templates A set of standard document templates. 项目地址: https://gitcode.com/gh_mirrors/tem/templates gh_mirrors/tem/templates是一套标准化文档模板集合&#xff0c…

作者头像 李华