给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:
输入: s = "loveleetcode"
输出: 2
示例 3:
输入: s = "aabb"
输出: -1
提示:
- 1 <= s.length <= 10^5
- s 只包含小写字母
解题思路
1.首先用哈希表统计每个字母出现的次数
2.然后遍历字符串,如果发现字符只出现一次,直接返回对应的下标,否则循环终止之后返回-1
代码
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
// 创建一个哈希表
let map = new Map()
// 统计次数
for (let i = 0; i < s.length; i++) {
let word = s.charAt(i)
if (map.has(word)) {
let val = map.get(word)
map.set(word, val + 1)
} else {
map.set(word, 1)
}
}
// 找到第一个只出现一次的字母
for (let i = 0; i < s.length; i++) {
if (map.get(s.charAt(i)) === 1) {
return i
}
}
return -1
};