Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8e777ff

Browse files
feat: add solutions to lc problem: No.0269 (doocs#4441)
No.0269.Alien Dictionary
1 parent aca2202 commit 8e777ff

File tree

3 files changed

+238
-0
lines changed

3 files changed

+238
-0
lines changed

‎solution/0200-0299/0269.Alien Dictionary/README.md‎

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,87 @@ public:
288288
};
289289
```
290290
291+
#### Go
292+
293+
```go
294+
func alienOrder(words []string) string {
295+
g := [26][26]bool{}
296+
s := [26]bool{}
297+
cnt := 0
298+
n := len(words)
299+
for i := 0; i < n-1; i++ {
300+
for _, c := range words[i] {
301+
if cnt == 26 {
302+
break
303+
}
304+
c -= 'a'
305+
if !s[c] {
306+
cnt++
307+
s[c] = true
308+
}
309+
}
310+
m := len(words[i])
311+
for j := 0; j < m; j++ {
312+
if j >= len(words[i+1]) {
313+
return ""
314+
}
315+
c1, c2 := words[i][j]-'a', words[i+1][j]-'a'
316+
if c1 == c2 {
317+
continue
318+
}
319+
if g[c2][c1] {
320+
return ""
321+
}
322+
g[c1][c2] = true
323+
break
324+
}
325+
}
326+
for _, c := range words[n-1] {
327+
if cnt == 26 {
328+
break
329+
}
330+
c -= 'a'
331+
if !s[c] {
332+
cnt++
333+
s[c] = true
334+
}
335+
}
336+
337+
inDegree := [26]int{}
338+
for _, out := range g {
339+
for i, v := range out {
340+
if v {
341+
inDegree[i]++
342+
}
343+
}
344+
}
345+
q := []int{}
346+
for i, in := range inDegree {
347+
if in == 0 && s[i] {
348+
q = append(q, i)
349+
}
350+
}
351+
ans := ""
352+
for len(q) > 0 {
353+
t := q[0]
354+
q = q[1:]
355+
ans += string(t + 'a')
356+
for i, v := range g[t] {
357+
if v {
358+
inDegree[i]--
359+
if inDegree[i] == 0 && s[i] {
360+
q = append(q, i)
361+
}
362+
}
363+
}
364+
}
365+
if len(ans) < cnt {
366+
return ""
367+
}
368+
return ans
369+
}
370+
```
371+
291372
<!-- tabs:end -->
292373

293374
<!-- solution:end -->

‎solution/0200-0299/0269.Alien Dictionary/README_EN.md‎

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,87 @@ public:
269269
};
270270
```
271271
272+
#### Go
273+
274+
```go
275+
func alienOrder(words []string) string {
276+
g := [26][26]bool{}
277+
s := [26]bool{}
278+
cnt := 0
279+
n := len(words)
280+
for i := 0; i < n-1; i++ {
281+
for _, c := range words[i] {
282+
if cnt == 26 {
283+
break
284+
}
285+
c -= 'a'
286+
if !s[c] {
287+
cnt++
288+
s[c] = true
289+
}
290+
}
291+
m := len(words[i])
292+
for j := 0; j < m; j++ {
293+
if j >= len(words[i+1]) {
294+
return ""
295+
}
296+
c1, c2 := words[i][j]-'a', words[i+1][j]-'a'
297+
if c1 == c2 {
298+
continue
299+
}
300+
if g[c2][c1] {
301+
return ""
302+
}
303+
g[c1][c2] = true
304+
break
305+
}
306+
}
307+
for _, c := range words[n-1] {
308+
if cnt == 26 {
309+
break
310+
}
311+
c -= 'a'
312+
if !s[c] {
313+
cnt++
314+
s[c] = true
315+
}
316+
}
317+
318+
inDegree := [26]int{}
319+
for _, out := range g {
320+
for i, v := range out {
321+
if v {
322+
inDegree[i]++
323+
}
324+
}
325+
}
326+
q := []int{}
327+
for i, in := range inDegree {
328+
if in == 0 && s[i] {
329+
q = append(q, i)
330+
}
331+
}
332+
ans := ""
333+
for len(q) > 0 {
334+
t := q[0]
335+
q = q[1:]
336+
ans += string(t + 'a')
337+
for i, v := range g[t] {
338+
if v {
339+
inDegree[i]--
340+
if inDegree[i] == 0 && s[i] {
341+
q = append(q, i)
342+
}
343+
}
344+
}
345+
}
346+
if len(ans) < cnt {
347+
return ""
348+
}
349+
return ans
350+
}
351+
```
352+
272353
<!-- tabs:end -->
273354

274355
<!-- solution:end -->
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
func alienOrder(words []string) string {
2+
g := [26][26]bool{}
3+
s := [26]bool{}
4+
cnt := 0
5+
n := len(words)
6+
for i := 0; i < n-1; i++ {
7+
for _, c := range words[i] {
8+
if cnt == 26 {
9+
break
10+
}
11+
c -= 'a'
12+
if !s[c] {
13+
cnt++
14+
s[c] = true
15+
}
16+
}
17+
m := len(words[i])
18+
for j := 0; j < m; j++ {
19+
if j >= len(words[i+1]) {
20+
return ""
21+
}
22+
c1, c2 := words[i][j]-'a', words[i+1][j]-'a'
23+
if c1 == c2 {
24+
continue
25+
}
26+
if g[c2][c1] {
27+
return ""
28+
}
29+
g[c1][c2] = true
30+
break
31+
}
32+
}
33+
for _, c := range words[n-1] {
34+
if cnt == 26 {
35+
break
36+
}
37+
c -= 'a'
38+
if !s[c] {
39+
cnt++
40+
s[c] = true
41+
}
42+
}
43+
44+
inDegree := [26]int{}
45+
for _, out := range g {
46+
for i, v := range out {
47+
if v {
48+
inDegree[i]++
49+
}
50+
}
51+
}
52+
q := []int{}
53+
for i, in := range inDegree {
54+
if in == 0 && s[i] {
55+
q = append(q, i)
56+
}
57+
}
58+
ans := ""
59+
for len(q) > 0 {
60+
t := q[0]
61+
q = q[1:]
62+
ans += string(t + 'a')
63+
for i, v := range g[t] {
64+
if v {
65+
inDegree[i]--
66+
if inDegree[i] == 0 && s[i] {
67+
q = append(q, i)
68+
}
69+
}
70+
}
71+
}
72+
if len(ans) < cnt {
73+
return ""
74+
}
75+
return ans
76+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /