Update 0387.First-Unique-Character-in-a-String.md

This commit is contained in:
kingeasternsun
2020-12-23 12:53:01 +08:00
committed by GitHub
parent e3fd0d2671
commit 2c41ea320f

View File

@@ -45,4 +45,57 @@ func firstUniqChar(s string) int {
return -1
}
```
```
## 思路2
这个思路只超过81%的用户但是如果测试样例中s的字符串很长但是满足条件的字符都在靠后的位置的话这个思路应该会更有优势
- 通过记录每个字符的第一次出现的位置和最后一次出现的位置
- 第一次对s进行一次遍历
- 第二次仅仅对数组进行遍历就可以了
## 代码
执行用时: 8 ms
内存消耗: 5.2 MB
```go
func firstUniqChar(s string) int {
charMap := make([][2]int, 26)
for i := 0; i < 26; i++ {
charMap[i][0] = -1
charMap[i][1] = -1
}
for i := 0; i < len(s); i++ {
if charMap[s[i]-'a'][0] == -1 {
charMap[s[i]-'a'][0] = i
} else { //已经出现过
charMap[s[i]-'a'][1] = i
}
}
res := len(s)
for i := 0; i < 26; i++ {
//只出现了一次
if charMap[i][0] >= 0 && charMap[i][1] == -1 {
if charMap[i][0] < res {
res = charMap[i][0]
}
}
}
if res == len(s) {
return -1
}
return res
}
```