File tree 1 file changed +47
-0
lines changed
1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ func ladderLength (beginWord string , endWord string , wordList []string ) int {
2
+ if ! contains (wordList , endWord ) {
3
+ return 0
4
+ }
5
+
6
+ nei := make (map [string ][]string )
7
+ wordList = append (wordList , beginWord )
8
+ for _ , word := range wordList {
9
+ for j := 0 ; j < len (word ); j ++ {
10
+ pattern := word [:j ] + "*" + word [j + 1 :]
11
+ nei [pattern ] = append (nei [pattern ], word )
12
+ }
13
+ }
14
+
15
+ visit := map [string ]bool {beginWord : true }
16
+ q := []string {beginWord }
17
+ res := 1
18
+ for len (q ) != 0 {
19
+ for tmp := len (q ); tmp > 0 ; tmp -- {
20
+ word := q [0 ]
21
+ q = q [1 :]
22
+ if word == endWord {
23
+ return res
24
+ }
25
+ for j := 0 ; j < len (word ); j ++ {
26
+ pattern := word [:j ] + "*" + word [j + 1 :]
27
+ for _ , neiWord := range nei [pattern ] {
28
+ if ! visit [neiWord ] {
29
+ visit [neiWord ] = true
30
+ q = append (q , neiWord )
31
+ }
32
+ }
33
+ }
34
+ }
35
+ res += 1
36
+ }
37
+ return 0
38
+ }
39
+
40
+ func contains (s []string , word string ) bool {
41
+ for _ , element := range s {
42
+ if element == word {
43
+ return true
44
+ }
45
+ }
46
+ return false
47
+ }
You can’t perform that action at this time.
0 commit comments