-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
52 lines (40 loc) · 1.04 KB
/
main.go
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
type Pair struct {
Index int
Frequency int
}
/**
* time O(2n) -> O(n)
* space O(n)
**/
func firstUniqueCharacter(text string) int {
const alphabetLength = 26
var characterFrequencyTable = make(map[rune]*Pair, alphabetLength)
for index, character := range text {
if _, ok := characterFrequencyTable[character]; !ok {
characterFrequencyTable[character] = &Pair{Index: index, Frequency: 0}
}
var pair, _ = characterFrequencyTable[character]
pair.Frequency++
}
for _, character := range text {
var pair, _ = characterFrequencyTable[character]
if pair.Frequency == 1 {
return pair.Index
}
}
return -1
}
func main() {
/*
Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode"
return 0.
s = "loveleetcode",
return 2.
Note: You may assume the string contain only lowercase letters.
*/
println("leetcode", firstUniqueCharacter("leetcode"))
println("loveleetcode", firstUniqueCharacter("loveleetcode"))
}