Skip to content

Commit 14646c0

Browse files
Create 0127-word-ladder.go
Accepted submission: _https://leetcode.com/submissions/detail/871401854/_
1 parent 6bfb5ff commit 14646c0

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Diff for: go/0127-word-ladder.go

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
}

0 commit comments

Comments
 (0)