题目:
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/first-unique-character-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
点击跳转LeetCode-387. 字符串中的第一个唯一字符
示例1:
输入: s = "leetcode"
输出: 0
示例2:
输入: s = "loveleetcode"
输出: 2
示例3:
输入: s = "aabb"
输出: -1
提示:
· 1 <= s.length <= 105
· s 只包含小写字母
解法一:哈希表
1. 将字符及其出现次数存入哈希表中:(key:元素 value:出现次数)
如果哈希表中不存在该元素,则向哈希表中添加该元素,值设为 1 ;
如果哈希表中已经存在该元素,则重设该元素的值在原先基础上 +1;
2. 遍历哈希表,找到值为1的元素则返回其下标;没找到则返回 -1 。
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
const map = new Map();
const len = s.length;
for (let i = 0; i < len; i++) {
if (map.has(s[i])) {
map.set(s[i], map.get(s[i]) + 1);
} else {
map.set(s[i], 1);
}
}
for (let i = 0; i < len; i++) {
if (map.get(s[i]) == 1) {
return i;
}
}
return -1;
};
解法二:
遍历字符串,如果当前字符第一次出现的索引和最后一个索引相同,则说明该字符只出现过一次
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
for (let i = 0, len = s.length; i < len; i++) {
if (s.indexOf(s[i]) == s.lastIndexOf(s[i])) {
return i;
}
}
return -1;
};