尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

剑指offer-34、第⼀次出现的字符

剑指offer-34、第⼀次出现的字符
📅 发布时间:2026/6/20 0:32:06

题目描述

在⼀个字符串( 0<=字符串⻓度<=10000 ,全部由字⺟组成)中找到第⼀个只出现⼀次的字符,并返回它的位置, 如果没有则返回 -1 (需要区分⼤⼩写).(从 0 开始计数)

示例1
输⼊:"google"
返回:4

思路及解答

暴力遍历(不推荐)

通过双重循环检查每个字符是否只出现一次。

public class Solution {public int FirstNotRepeatingChar(String str) {if (str == null || str.length() == 0) return -1;for (int i = 0; i < str.length(); i++) {char currentChar = str.charAt(i);boolean isUnique = true;// 检查当前字符是否在后续或前面重复出现for (int j = 0; j < str.length(); j++) {if (i != j && currentChar == str.charAt(j)) {isUnique = false;break; // 发现重复,立即跳出内层循环}}if (isUnique) {return i; // 返回第一个唯一字符的位置}}return -1; // 没有找到唯一字符}
}
  • 时间复杂度​:O(n²),其中n是字符串长度。对于每个字符,都需要遍历整个字符串检查是否重复
  • ​空间复杂度​:O(1),只使用了常数级别的额外空间

哈希表统计次数

使用HashMap来统计每个字符的出现次数,然后按顺序查找第一个出现次数为1的字符

import java.util.HashMap;public class Solution {public int FirstNotRepeatingChar(String str) {if (str == null || str.length() == 0) return -1;// 使用HashMap统计每个字符的出现次数HashMap<Character, Integer> charCount = new HashMap<>();// 第一次遍历:统计字符出现次数for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);charCount.put(c, charCount.getOrDefault(c, 0) + 1);}// 第二次遍历:按原顺序查找第一个出现次数为1的字符for (int i = 0; i < str.length(); i++) {if (charCount.get(str.charAt(i)) == 1) {return i;}}return -1;}
}
  • 时间复杂度​:O(n),需要两次线性遍历
  • ​空间复杂度​:O(n)

使⽤字符数组来统计

由于全都是字符,’ A ‘-’ z ‘⼀共 58 个字符(中间有其他字符),针对已知字符范围的情况,可以用数组代替HashMap,提高效率

public class Solution {public int FirstNotRepeatingChar(String str) {if (str == null || str.length() == 0) return -1;// 由于要区分大小写,且包含所有字母,使用128覆盖基本ASCII字符int[] charCount = new int[128];// 第一次遍历:统计字符出现次数for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);charCount[c]++;}// 第二次遍历:查找第一个唯一字符for (int i = 0; i < str.length(); i++) {if (charCount[str.charAt(i)] == 1) {return i;}}return -1;}
}
  • ​时间复杂度​:O(n)
  • ​空间复杂度​:O(1),数组大小固定为128

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

相关新闻

  • 2025 年海运服务最新推荐排行榜:聚焦优质运输网络的澳洲悉尼墨尔本家具及大型物品海运公司盘点
  • 2025 年数据恢复系统公司推荐转转大师数据恢复,深度剖析各款系统平台核心优势与适用场景数据恢复系统推荐指南
  • 快速排序(hoare)

最新新闻

  • 从零到一:基于JasperGold的FPV实战入门与避坑指南
  • YOLOv8涨点新思路:集成ContextAggregation注意力模块,性能实测提升显著!
  • 推荐系统(十三)阿里深度兴趣网络(三):DIEN实战解析与工程优化
  • 飞思卡尔MC68HC908RC24 CMT模块:嵌入式无线信号生成的硬件利器
  • MC9S12HY/HA电气特性深度解析:ADC精度、Flash时序与SPI速率实战
  • 智能体(AI Agent)是一种具备感知、决策与执行能力的自主软件系统,能够基于目标理解任务

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号