387-字符串中的第一个唯一字符
访问量:948

一、题目

题目地址:https://leetcode.com/problems/first-unique-character-in-a-string/submissions/


给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。


s = "leetcode"

返回 0.


s = "loveleetcode",

返回 2.

二、解法

1、解法一

func firstUniqChar(s string) int {
	var unqMap = make(map[uint8]bool) //记录字符是否是唯一的
	var strLen = len(s)
	if strLen == 0 {
		return -1
	}
	index := 0
	for i := 0; i < strLen; i++ {
		val := s[i]
		if unqVal, ok := unqMap[val]; ok { //代表该字符重复
			if ! unqVal {
				continue
			}
			unqMap[val] = false
			keyVal := s[index]
			if val == keyVal {
				for {
					index += 1
					if index >= strLen {
						return -1
					}
					keyVal := s[index]
					if unqVal, ok := unqMap[keyVal]; ok && unqVal || !ok {
						break
					}
				}
			}
			continue
		}
		unqMap[val] = true
	}

	return index
}