package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return int整型
*/
func FirstNotRepeatingChar(str string) int {
// write code here
m := make(map[rune]int)
var (
charQueue []rune
indexQueue []int
)
for i, s := range str {
if _, ok := m[s]; !ok { // 第一次出现
m[s] = i
charQueue = append(charQueue, s)
indexQueue = append(indexQueue, i)
} else {
// 已经出现过
m[s] = -1
// 排除重复的
for len(charQueue) != 0 {
if m[charQueue[0]] != -1 {
break
}
charQueue = charQueue[1:]
indexQueue = indexQueue[1:]
}
}
}
if len(indexQueue) == 0 {
return -1
}
return indexQueue[0]
}