1
+ package medium
2
+
3
+ import GreedyTopic
4
+ import StackTopic
5
+ import StringTopic
6
+ import java.util.*
7
+
8
+ /* *
9
+ * 316. Remove Duplicate Letters
10
+ * https://leetcode.com/problems/remove-duplicate-letters/
11
+ *
12
+ Given a string s, remove duplicate letters so that every letter appears once and only once.
13
+ You must make sure your result is the smallest in lexicographical order among all possible results.
14
+ BULLSHIT
15
+ */
16
+
17
+ class Medium316 : StringTopic , StackTopic , GreedyTopic {
18
+
19
+ fun removeDuplicateLetters (s : String ): String {
20
+ val stack = Stack <Char >()
21
+ val freq = IntArray (26 )
22
+ val seen = BooleanArray (26 )
23
+ for (element in s) { freq[element - ' a' ]++ }
24
+ for (element in s) {
25
+ freq[element - ' a' ]--
26
+ if (seen[element - ' a' ]) continue
27
+ while (stack.size > 0 && stack.peek() > element && freq[stack.peek() - ' a' ] > 0 ) {
28
+ seen[stack.pop() - ' a' ] = false
29
+ }
30
+ stack.push(element)
31
+ seen[element - ' a' ] = true
32
+ }
33
+ return stack.joinToString(" " )
34
+ }
35
+ }
36
+
37
+ fun main () {
38
+ println (Medium316 ().removeDuplicateLetters(" bcabc" ))
39
+ println (Medium316 ().removeDuplicateLetters(" cbacdcbc" ))
40
+ }
0 commit comments