Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit c95a244

Browse files
committed
1081 accepted.
1 parent 6a850c2 commit c95a244

File tree

3 files changed

+28
-41
lines changed

3 files changed

+28
-41
lines changed

.vscode/settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"abcdefgb",
3737
"abcdefgbabcdei",
3838
"abcdefgh",
39+
"abcdefghijklmnopqrstuvwxy",
3940
"abcdefghijklmnopqrstuvwxyz",
4041
"akyj",
4142
"alexlovesleetcode",

Algorithms/1081.smallest-subsequence-of-distinct-characters/smallest-subsequence-of-distinct-characters.go

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,36 @@ package problem1081
33
import "strings"
44

55
func smallestSubsequence(text string) string {
6-
rec := make([][]int, 26)
7-
count := 0
6+
n := len(text)
7+
8+
last := [26]int{}
89
for i, b := range text {
9-
c := b - 'a'
10-
rec[c] = append(rec[c], i)
11-
if len(rec[c]) == 1 {
12-
count++
13-
}
10+
last[b-'a'] = i
1411
}
1512

16-
clean := func(flag int) {
17-
for i := 0; i < 26; i++ {
18-
if len(rec[i]) == 0 {
19-
continue
20-
}
21-
j := 0
22-
for j < len(rec[i]) && rec[i][j] < flag {
23-
j++
24-
}
25-
rec[i] = rec[i][j:]
13+
stack, top := make([]int, n), -1
14+
hasSeen := [26]bool{}
15+
for i := 0; i < n; i++ {
16+
c := int(text[i] - 'a')
17+
if hasSeen[c] {
18+
continue
2619
}
27-
}
28-
29-
beforeAll := func(index int) bool {
30-
ok := true
31-
for i := 0; i < 26 && ok; i++ {
32-
if len(rec[i]) == 0 {
33-
continue
34-
}
35-
ok = index <= rec[i][len(rec[i])-1]
20+
for top >= 0 &&
21+
stack[top] > c &&
22+
i < last[stack[top]] {
23+
pop := stack[top]
24+
top--
25+
hasSeen[pop] = false
3626
}
37-
return ok
27+
top++
28+
stack[top] = c
29+
hasSeen[c] = true
3830
}
3931

4032
var sb strings.Builder
41-
for i := 0; i < count; i++ {
42-
for j := 0; j < 26; j++ {
43-
if len(rec[j]) == 0 {
44-
continue
45-
}
46-
index := rec[j][0]
47-
if beforeAll(index) {
48-
sb.WriteByte(byte(j + 'a'))
49-
rec[j] = nil
50-
clean(index)
51-
break
52-
}
53-
}
33+
for i := 0; i <= top; i++ {
34+
c := byte(stack[i] + 'a')
35+
sb.WriteByte(c)
5436
}
55-
5637
return sb.String()
5738
}

Algorithms/1081.smallest-subsequence-of-distinct-characters/smallest-subsequence-of-distinct-characters_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ var tcs = []struct {
1212
ans string
1313
}{
1414

15+
{
16+
"fduxqmmeghmsrohvpclyjmhwwxipnvqxhfmgtqtcutsbjhbmuollkwocxxdmoswsnksdflwbxetsvbuvlwtxonpyhyrodjmdbvoopfxinkojyugqegbprgqxjpghojhymsoqpylrmelsonpqrtjmjgbgmmpqklfiiaacgurrbqtbqyylfqiefbrfyotiptqujknegwjiyqybldgomccdbiikfsfnqwcilblilfwcxyytnvdrppmcslildixlungoetlqvpvpwgmhqvwwjmllomtipfavbhbahclcfdyvgyqhpxebmtovgxqtjwdiwkqtvnlumwjgvubghkcjsvkrydpasdknkdclutjcqbretopqobivwfdkqkvmwkkufwnrngfgixlinerxcnrmsbiybcxmmndhhdrwykwmgckxqhlhnabppswwkxbjpvpeplcyyhcvhjulxvvgabddcurghjurledjdatsytdkqlfyrpnasrqiyecvjtkoiuigawvqfemwwnpkhapxvaqrlnncxdepunrnimqwcinnbnifvsjkwhufoawtbeghauvxiggajubybemfyeropjwvuhjrtiggsoaddpbgfcftppwnnlgnhbrdbhycslqlfkwdiswxntapahkpsyufkthkgmbvtmbnutyhrpjhotpndnldiugmmgxmtsdxqjojaqbedotgxlgaqyempwjlvtgifybqmxvcfbuonwivfhpqrmxfakrhjrsxovxgfwcteuadldgyghvcrjaaomwisvouyqqdmdbsbuvepcaxtkuqtsvqjbmejvptmbmbxasbxadvauepxicyjnydhmsvlohnnqoevhewwmxuqingvgbniqouikflimmxpuygutamkthmkydlwtvigyeutikpvnoqisehcgaylunxgwdvanwhsbjkukxahuviutenigfmkblniwdtqxxnswjoxhqqooaltrubgbqvqqdmdmrixidgukqx",
17+
"abcdefghijklmnopqrstuvwxy",
18+
},
19+
1520
{
1621
"cdadabcc",
1722
"adbc",

0 commit comments

Comments
 (0)