Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- DNS
- 정글#정글사관학교#3기#내일#기대#설렘#희망#노력
- HTTP
- web-proxy lab
- ip
- https://firecatlibrary.tistory.com/49?category=874970
- strcat
- group by
- SQL
- TCP
- Error Code: 1055
- strcpy
- C언어
- mysql
- BSD소켓
- https://coding-factory.tistory.com/641
Archives
- Today
- Total
매일을 설렘으로
[Go] leetcode 387. First Unique Character in a String 본문
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
}