1234567891011121314151617181920212223242526 |
- 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)
- }
|