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

LeetCode - 387. 字符串中的第一个唯一字符

题目

387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

思路

用哈希表统计每个字符出现的次数

  • 创建一个 unordered_map<char, int>,遍历字符串,把每个字符出现的次数存进去。

再遍历字符串,找到第一个只出现一次的字符

  • 再次遍历字符串,查哈希表,如果某个字符的次数为1,返回它的下标。

如果没有,返回-1

读者可能出现的错误写法 

class Solution {
public:int firstUniqChar(string s) {vector<char,int> result;for(char e : s){result[e]++;}for(int i = 0;i<result.size();i++){if(result[i] == 1){return i;}}return -1;}
};

1. vector<char, int> result; 语法错误

  • 解释:

vector 是顺序容器,只能有一个类型参数,比如 vector<int> 或 vector<char>,不能像 map 那样有两个类型参数。

  • 正确用法:

如果你想统计每个字符出现的次数,应该用 unordered_map<char, int> 或者用数组 int result[26](只针对小写字母)。

2. result[e]++ 逻辑错误

  • 解释:

vector 不能用字符 e 作为下标,只有数组或 map 才能这样用。

并且 vector 的下标必须是整数,且不能自动扩容到字符的ASCII值。

  • 正确用法:
  • 如果用数组:result[e - 'a']++,前提是 result 长度为26。
  • 如果用 unordered_map:result[e]++。

3. 第二个循环遍历方式错误

  • 解释:

你写的是 for(int i = 0; i < result.size(); i++),但 result.size() 不是字符串长度,而是容器长度。

你应该遍历字符串 s,判断每个字符出现的次数是否为1。

  • 正确用法:

for(int i = 0; i < s.size(); i++) { if (result[s[i] - 'a'] == 1) return i; }

正确写法

class Solution {
public:int firstUniqChar(string s) {unordered_map<char,int> result;for(char e : s){result[e]++;}for(int i = 0;i<s.size();i++){if(result[s[i]] == 1){return i;}}return -1;}
};

文章转载自:

http://5fqgJjp5.rjqtq.cn
http://ncwWWzmX.rjqtq.cn
http://g9YyMZ1l.rjqtq.cn
http://h3JZZ3ZF.rjqtq.cn
http://8lhoFIdN.rjqtq.cn
http://Hqjwotxm.rjqtq.cn
http://ifXfUW8Z.rjqtq.cn
http://DS2H9doP.rjqtq.cn
http://XpAf2uzu.rjqtq.cn
http://OSzn9pkF.rjqtq.cn
http://oD290jtS.rjqtq.cn
http://7Wh4unvr.rjqtq.cn
http://7hD2p81o.rjqtq.cn
http://xac4oSEB.rjqtq.cn
http://n32j2ck8.rjqtq.cn
http://6u7n6i1o.rjqtq.cn
http://RHOW2ZBV.rjqtq.cn
http://uk9LBlGE.rjqtq.cn
http://Jv6VoEbg.rjqtq.cn
http://eKtc6iip.rjqtq.cn
http://izlL4Nuq.rjqtq.cn
http://fdWsWcnk.rjqtq.cn
http://JC3UdgrQ.rjqtq.cn
http://OWJzyuXF.rjqtq.cn
http://P4Qvukc9.rjqtq.cn
http://Z8PXmXsY.rjqtq.cn
http://H6OL3Emo.rjqtq.cn
http://g4P4Aiu1.rjqtq.cn
http://qJLM5SKU.rjqtq.cn
http://1G6oyeJi.rjqtq.cn
http://www.dtcms.com/a/247668.html

相关文章:

  • 商城系统微服务化改造:三大难点与实战解决方案
  • 【工具教程】批量PDF识别提取区域的内容重命名,将PDF指定区域位置的内容提取出来改名的注意事项
  • 动态规划: 背包DP大合集
  • 算法第15天:继续二叉树|前序递归+回溯与前序递归的场景总结、最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树
  • 【Linux网络编程】基于udp套接字实现的网络通信
  • WebView工作原理全解析:如何实现混合开发的无缝衔接
  • 69、JS中如何调用上位机接口
  • 深入讲解一下 Nomic AI 的 GPT4All 这个项目
  • 局域网内电脑与安卓设备低延迟同屏技术【100ms - 200ms】
  • 开疆智能ModbusTCP转Devicenet网关连接三菱PLC与ABB机器人配置案例
  • 解决U盘安装Win11无法命令行跳过联网激活的问题
  • Python内存互斥与共享深度探索:从GIL到分布式内存的实战之旅
  • java发送excel附件的邮件
  • 低成本同屏方案:电脑 + 路由器实现 50 台安卓平板实时同屏
  • 电脑在使用过程中频繁死机怎么办
  • 组合模式深度解析:Java设计模式实战指南与树形结构处理架构设计
  • React Native 构建与打包发布(iOS + Android)
  • 电脑虚拟网卡安装(添加以太网2)
  • 将包含父子关系的扁平列表 List<Demo> 转换成树形结构的 List<DemoVO>,每个节点包含自己的子节点列表
  • Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战
  • 【结合JSR380自定义校验】
  • 神经网络压缩
  • PHP基础-运算符
  • 用AI思维重塑人生:像训练神经网络一样优化自己
  • Java EE 导读
  • 【Create my OS】1 最小内核
  • MySQL-DDL语句深度解析与实战指南
  • Web开发实战:Gin + GORM 构建企业级 API 项目
  • RabbitMQ的使用--项目创建、五种工作模式、高级特性
  • Blender 4.4.3三维动画建模和渲染软件Win/Mac双端资源下载