题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路1:时间复杂度o(n的平方)
逐个遍历字符串中的每一个字符,每遍历一个字符,都将它和它后面的字符进行比较,如果没有重复的,则说明该字符只出现一次。这种方法的时间负责度为o(n的平方)。
思路2:时间复杂度o(n)
通过对字符串的一次遍历,将字符串中出现的所有的字符和对应的次数保存起来,放到一个容器里。再次遍历,通过查字典的方式直接得到第一个只出现一次的字符对应的idx。
实现1:
java util包中的哈希表就可以存储key-value形式的数据,通过遍历,将字符及其出现的次数存储在哈希表中,然后直接查表获得第一次出现1次的字符。
实现2:
不使用java的工具包,自己创建映射关系
注意:字符char的范围是-128到127,不仅仅是a-z
代码中的hash函数是为了将-128-127的char字符映射到arr的0-255个下标下。
参考博客:
https://www.jianshu.com/p/be20ae23e5fb
https://blog.youkuaiyun.com/zjkC050818/article/details/71453529