func removeDuplicateLetters(s string) string { cnt := make([]int, 256) for _, c := range s { cnt[c]++ } set := make([]bool, 256) res := make([]rune, 0) tp := -1 for _, c := range s { cnt[c]-- if set[c] { continue } // If c is not in stack && stack is not empty && c less than top && top'll appear again, pop top for tp != -1 && c < res[tp] && 0 < cnt[res[tp]] { set[res[tp]] = false res = res[:tp] tp-- } res = append(res, c) set[c] = true tp++ } return string(res) }