力扣387(java)-字符串中的第一个唯一字符(简单)

题目:

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

 示例 1:

输入: s = "leetcode"
输出: 0
示例 2:

输入: s = "loveleetcode"
输出: 2
示例 3:

输入: s = "aabb"
输出: -1
 

提示:

1 <= s.length <= 105
s 只包含小写字母

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/first-unique-character-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

一、两次遍历

1.先统计出每个字母出现的次数,s1[i] - 'a': s[i]减去a对应的ASCII码。s[i]为字符数组因为题中提示给出所有字母均为小写字母,小写字母的范围为97-122,数组的范围为0-26,小写字母范围相对于数组范围大了97个位置,所以需要减掉97来找到原来的位置。例如:字母b,减去97为1,即b原来的位置为count[2]。

2.再次遍历字符数组,如果某字母出现的次数count[i] =1,直接返回i即可,否则,返回 -1。

代码:

 

 二、哈希表

解题思路与第一种一样,先统计出每个字母出现的次数,再次遍历如果统计数的次数为1,返回当前字符的索引即可。

代码:

 小知识:

1.map的初始化:统计出字符出现的次数,故键值类型为字符型,实指类型为整型。

 Map<Character, Integer> map = new HashMap<Character, Integer>();

2.map.getOrDefault()方法:

Map.getOrDefault(key,默认值);

Map中会存储一一对应的key和value;
如果 在Map中存在key,则返回key所对应的的value;
如果 在Map中不存在key,则返回默认值。

 

posted on 2022-05-10 20:03  我不想一直当菜鸟  阅读(261)  评论(0编辑  收藏  举报