diff --git a/0387-First-Unique-Character-In-String/Animation/387.mp4 b/0387-First-Unique-Character-In-String/Animation/387.mp4 new file mode 100644 index 0000000..1ccfd95 Binary files /dev/null and b/0387-First-Unique-Character-In-String/Animation/387.mp4 differ diff --git a/0387-First-Unique-Character-In-String/Article/0387-First-Unique-Character-In-String.md b/0387-First-Unique-Character-In-String/Article/0387-First-Unique-Character-In-String.md new file mode 100644 index 0000000..8fb1cb6 --- /dev/null +++ b/0387-First-Unique-Character-In-String/Article/0387-First-Unique-Character-In-String.md @@ -0,0 +1,72 @@ +# 387. 字符串中的第一个唯一字符 + +> 本文首发于公众号「图解面试算法」,是 [图解 LeetCode ]() 系列文章之一。 +> +> 同步博客:https://www.algomooc.com + +题目来源于 LeetCode 上 387题,主要涉及哈希表。 + +## 题目 + +给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 + +案例: + +``` +s = "leetcode" +返回 0. + +s = "loveleetcode", +返回 2. +``` + +注意事项:您可以假定该字符串只包含小写字母。 + +## 题目解析 + +这道题不管怎么样都是要遍历一遍字符串才能保证字符是唯一,所以我们的算法如下 + +1. 遍历的时候把每个字符出现的次数用Map记录一下,如果这个字符是第一次出现,那么赋值为[i],如果它已经在Map里有了,那么我们给这个字符的值赋为false。 +2. 再次遍历Map,找到值不为false的第一个字符,然后将它的值输出来 +3. 如果值全部为false,然后返回-1 + + +## 动画理解 + + + + +## 参考代码 + + +```javaScript +/** + * @param {string} s + * @return {number} + */ +var firstUniqChar = function(s) { + let map = new Map() + for (let i = 0; i < s.length;i++) { + if(map.has(s[i])) { + map.set(s[i], false) + }else { + map.set(s[i], [i]) + } + } + for(let item of map){ + if (item[1]) { + return item[1][0] + } +   } + return -1 +}; +``` + +## 复杂度分析 + +哈希表的时间复杂度是O(n) + + +![](../../Pictures/qrcode.jpg) \ No newline at end of file