카테고리 없음

[Go] leetcode 387. First Unique Character in a String

하루설렘 2023. 2. 12. 03:02

Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.

 

Example 1:

Input: s = "leetcode"
Output: 0

Example 2:

Input: s = "loveleetcode"
Output: 2

Example 3:

Input: s = "aabb"
Output: -1

 

Constraints:

  • 1 <= s.length <= 105
  • s consists of only lowercase English letters.

# Approach
주어진 문자열을 돌면서, 각 문자마다, 그 이후에 있는 동일한 문자를 찾는다.
이미 찾았던 문자는 map에 저장하고 for문에서 동일한 문자가 나오면 continue하는 방식으로 한다. 

# Complexity
 
- Time complexity: O(N^2)
N + (N-1) + (N-2) ... + 1  ▶ (N+1) * N / 2
 

# Code
package main

import "strings"

func firstUniqChar(s string) int {
	checkMap := map[rune]struct{}{}

	for i, r := range s {
		if _, ok := checkMap[r]; ok {
			continue
		}
		nextIndex := strings.IndexRune(s[i+1:], r)

		if nextIndex == -1 {
			return i
		}

		checkMap[r] = struct{}{}
	}
	return -1
}