题目描述

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

示例1 输⼊:“google” 返回:4

思路及解答

暴力遍历(不推荐)

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

  • 时间复杂度​:O(n²),其中n是字符串长度。对于每个字符,都需要遍历整个字符串检查是否重复

  • 空间复杂度​:O(1),只使用了常数级别的额外空间

哈希表统计次数

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

  • 时间复杂度​:O(n),需要两次线性遍历

  • 空间复杂度​:O(n)

使⽤字符数组来统计

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

  • 时间复杂度​:O(n)

  • 空间复杂度​:O(1),数组大小固定为128