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]
}