---
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

[First Unique Character in a String - Leetcode 387 - Python](https://www.youtube.com/watch?v=rBENYgWy3xU)
