Files
leetcode/apps/docs/content/(01-linear-structures)/hash-table/387_first-unique-character-in-a-string.mdx
T

75 lines
2.0 KiB
Plaintext

---
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
icon: dot
topics:
- { name: "Hash Table", slug: "hash-table" }
- { name: "String", slug: "string" }
- { name: "Queue", slug: "queue" }
- { name: "Counting", slug: "counting" }
video: "rBENYgWy3xU"
companies:
- { name: "Amazon", period: "Thirty Days", frequency: 48.9 }
- { name: "Yandex", period: "Three Months", frequency: 76.1 }
- { name: "tcs", period: "Three Months", frequency: 73.7 }
- { name: "Bloomberg", period: "Three Months", frequency: 46.8 }
- { name: "Meta", period: "Three Months", frequency: 43.3 }
- { name: "Google", period: "Three Months", frequency: 23.9 }
- { name: "EPAM Systems", period: "Six Months", frequency: 76.2 }
- { name: "Goldman Sachs", period: "Six Months", frequency: 59 }
- { name: "Microsoft", period: "Six Months", frequency: 32 }
sidebar:
label: 'First Unique Character in a String'
badge: 'Easy'
---
### 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;
};
```