LeetCode387.字符串中的第一个唯一字符Golang版
1. 问题描述
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = “leetcode”
返回 0
s = “loveleetcode”
返回 2
提示:你可以假定该字符串只包含小写字母。
2. 思路
2.1. 思路1
- 统计字符串中每个字符出现的次数,放到hash表中
- 遍历hash表,找到只出现一次的元素,存放到数组中
- 遍历字符串,找到第一个在出现在以上数组中的元素,返回索引
3. 代码
3.1. 思路1代码
func firstUniqChar(s string) int {
chCounter := map[byte]int{}
oneChArray:= []byte{}
for i := 0; i < len(s); i++ {
chCounter[s[i]]++
}
for k,v := range chCounter {
if v == 1 {
oneChArray = append(oneChArray,k)
}
}
for i := 0; i < len(s); i++ {
if exit(oneChArray,s[i]) {
return i
}
}
return -1
}
func exit(chArray []byte,ch byte) bool {
for i := 0; i < len(chArray); i++ {
if ch == chArray[i] {
return true
}
}
return false
}
// 上面的太沙雕多此一举了,傻不拉几又把出现次数为1的元素提到一个数组中。
func firstUniqChar(s string) int {
chCounter := map[byte]int{}
for i := 0; i < len(s); i++ {
chCounter[s[i]]++
}
for i := 0; i < len(s); i++ {
if chCounter[s[i]] == 1 {
return i
}
}
return -1
}
这是一个关于LeetCode第387题的解决方案,使用Golang编程语言。算法通过建立字符计数映射,然后遍历字符串找到第一个出现次数为1的字符并返回其索引。
850

被折叠的 条评论
为什么被折叠?



