每日一題 2020.11.5
127. 單詞接龍
給定兩個單詞(beginWord 和 endWord)和一個字典,找到從 beginWord 到 endWord 的最短轉換序列的長度。轉換需遵循如下規則:
每次轉換隻能改變一個字母。
轉換過程中的中間單詞必須是字典中的單詞。
說明:
- 如果不存在這樣的轉換序列,返回 0。
- 所有單詞具有相同的長度。
- 所有單詞只由小寫字母組成。
- 字典中不存在重複的單詞。
- 你可以假設 beginWord 和 endWord 是非空的,且二者不相同。
思路:建圖後跑最短路即可
var length int
var dif [][]int
var vis []bool
var result int
var d []int
const (
INT_MAX = 1<<32-1
)
func getDif(s1 string, s2 string)(ans int){
for i:= 0;i<len(s1);i++{
if s1[i] != s2[i]{
ans++
if ans > 1{
return
}
}
}
return
}
func ladderLength(beginWord string, endWord string, wordList []string) int {
length = len(wordList)
dif = make([][]int,length+2)
vis = make([]bool,length+2)
d = make([]int,length+2)
for i:= 0;i<length+2;i++{
dif[i] = make([]int,length+2)
d[i] = INT_MAX
vis[i] = false
}
dif[0][length+1] = getDif(beginWord,endWord)
dif[length+1][0] = dif[0][length+1]
can := false
for i :=0 ;i<length;i++{
dif[0][i+1] = getDif(beginWord,wordList[i])
dif[i+1][0] = dif[0][i+1]
dif[i+1][length+1] = getDif(endWord,wordList[i])
dif[length+1][i+1] = dif[i+1][length+1]
if dif[i+1][length+1] == 0{
can = true
}
}
if !can{
return 0
}
for i:= 0;i<length;i++{
for j:=i;j<length;j++{
dif[i+1][j+1] = getDif(wordList[i],wordList[j])
dif[j+1][i+1] = dif[i+1][j+1]
}
}
d[0] = 0
count := 1
for count <= length {
minNum := INT_MAX
ind := -1
for i:=0;i<=length;i++{
if d[i] < minNum && !vis[i]{
minNum = d[i]
ind = i;
}
}
if ind == -1{
break
}
vis[ind] = true
for i:=0;i<=length+1;i++{
if dif[ind][i] == 1 && d[i] > d[ind] + 1{
d[i] = d[ind] + 1
}
}
count++
}
if d[length+1] == INT_MAX{
return 0
}
return d[length+1]+1
}
相關文章
- 每日一題每日一題
- 每日一題2每日一題
- 雲端計算每日一題每日一題
- CSDN專案:每日一題每日一題
- leetcode每日一題LeetCode每日一題
- 每日一題 -- 11-1每日一題
- 每日一題(94) - 堆排序每日一題排序
- 【每日一題】快照陣列每日一題陣列
- 每日一題: 有效括號每日一題
- [每日一題] 第十題:替換空格每日一題
- Leetcode每日一題(1)LeetCode每日一題
- [每日一題] 79. Word Search每日一題
- 4.4上海交大PMP試題每日一題每日一題
- 每日一題@49矩陣置零每日一題矩陣
- LeetCode每日一題:sort colorsLeetCode每日一題
- [每日一題] 第一題:判定是否互為字元重排每日一題字元
- [每日一題] 第二題:反轉連結串列每日一題
- 12.5上海交大PMP試題每日一題每日一題
- 12.7上海交大PMP試題每日一題每日一題
- [每日一題] 第十七題:青蛙跳臺階問題每日一題
- 王者榮耀2月15日每日一題的答案是什麼 微信公眾號每日一題每日一題
- LeetCode 每日一題「判定字元是否唯一」LeetCode每日一題字元
- 每日一題:五 特別的數字每日一題
- 每日一題:三 墨西哥人浪每日一題
- 雲端計算每日一題(NO.0002)每日一題
- 雲端計算每日一題(NO.0009)每日一題
- [每日一題]140. Word Break II每日一題
- 每日"兩"題 題解
- [每日一題] 第六題:不用加減乘除做加法每日一題
- [每日一題] 第八題:二叉樹的深度每日一題二叉樹
- [每日一題] 第二十題:最小的k個數每日一題
- [每日一題] 第三題:二叉樹的深度每日一題二叉樹
- 字典序的下一個排序--力扣每日一題排序力扣每日一題
- [每日一題] 判定是否互為字元重排每日一題字元
- LeetCode每日一題:Nim遊戲(No.292)LeetCode每日一題遊戲
- LeetCode每日一題: 找不同(No.389)LeetCode每日一題
- LeetCode每日一題: 移除元素(No.27)LeetCode每日一題
- 每日一題(開開森森學前端之REM)每日一題前端REM