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