--- title: '387. First Unique Character in a String' description: Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1 sidebar: label: 'First Unique Character in a String' badge: 'Easy' --- Hash Table ### Example 1: - Input: `s = "leetcode"` - Output: `0` - Explanation: The character `'l'` at index `0` is the first character that does not occur at any other index. ### Example 2: - Input: `s = "loveleetcode"` - Output: `2` ### Example 3: - Input: `s = "aabb"` - Output: `-1` ### Constraints: - `1 <= s.length <= 10^5` - `s` consists of only lowercase English letters. ## Approach ```mermaid flowchart TD S(["firstUniqChar(s)"]) --> F["Pass 1 — freq: count every char of s"] F --> L{"Pass 2 — more i in 0..len-1?"} L -- no --> E(["return -1"]) L -- yes --> Q{"freq[s[i]] == 1?"} Q -- yes --> R(["return i — leftmost wins because the scan is in order"]) Q -- no --> L ``` ## Solution ```js /** * @param {string} s * @return {number} */ var firstUniqChar = function (s) { const freq = {}; for (let c of s) freq[c] = (freq[c] || 0) + 1; for (let i = 0; i < s.length; i++) { if (freq[s[i]] === 1) { return i; } } return -1; }; ``` ## Explanation