golang_算法: leetcode_字符串03-[387]字符串中的第一个唯一字符

本文介绍了一个使用Go语言解决LeetCode第387题的方法,该题要求找到字符串中第一个不重复的字符。文章详细探讨了算法思路,包括如何利用哈希映射来优化查找过程。
摘要由CSDN通过智能技术生成
package main

import (
	"fmt"
	"strings"
)

//给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
//
//
//
// 示例:
//
// s = "leetcode"
//返回 0
//
//s = "loveleetcode"
//返回 2
//
//
//
//
// 提示:你可以假定该字符串只包含小写字母。
// Related Topics 哈希表 字符串


//leetcode submit region begin(Prohibit modification and deletion)

// go中有strings.Index函数可以直接使用
//strings包中的函数
//func Index(s, sep string) int
//子串sep在字符串s中第一次出现的位置,不存在则返回-1。
//func LastIndex(s, sep string) int
//子串sep在字符串s中最后一次出现的位置,不存在则返回-1。
func firstUniqChar1(s string) int {
	for _, v := range s {
		fIndex := strings.Index(s, string(v))
		lIndex := strings.LastIndex(s, string(v))
		if fIndex == lIndex {
			return fIndex
		}
	}
	return -1
}

// 使用数组,利用字母在ascii码中对应的值作为index
func firstUniqChar2(s string) int {
	b := make([]rune, 126)
	for _, v := range s {
		b[v]++
	}
	for k, v := range s {
		if b[v] == 1 {
			return k
		}
	}
	return -1
}

// 因为指定是小写字母,使用数组更节省空间
func firstUniqChar2_1(s string) int {
	b := [26]rune{}
	for _, v := range s {
		b[v - 'a']++
	}
	for k, v := range s {
		if b[v - 'a'] == 1 {
			return k
		}
	}
	return -1
}

// 使用map,原理同上
func firstUniqChar3(s string) int {
	m := make(map[rune]int)
	for _, v := range s {
		m[v]++
	}
	for k, v := range s {
		if m[v] == 1 {
			return k
		}
	}
	return -1
}
//leetcode submit region end(Prohibit modification and deletion)


func main() {
	s := "lovveleetcode"
	f := firstUniqChar(s)
	fmt.Println(f)
}

Output

8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值