Problem#
一個字串能夠從 beginWord
轉換成 endWord
稱作 transformation sequence
e.g. beginWord -> s1 -> s2 -> ... -> sk
,今天題目給你一個 wordList
問你從 beginWord
到 endWord
總共幾個字串,並且要最短的。
- 其中每個字串只差一個字元 => 相差一個字元才能轉換
- 轉換的字串都在
wordList
裏頭 beginWord
不一定要在wordList
裏頭
想法#
可以把每個 word 都想成圖上的 node,字串轉換就變成的從圖上的一個點移動到另一個點,
問題就變成想辦法建圖,從 beginWord
開始 bfs 即可。
對於每個字來說 e.g. dog
,有三條路可以走: .og
, d.g
, do.
,可以先建個 dictionary 來方便查找 e.g. .og = {dog, log, cog}
,
接著就遍歷 wordList
把圖建起來。
小細節是 beginWord
要等圖建好之後,再連到圖上(單向),這樣才不會走回去。
- 時間複雜度:
N = wordList.size()
,M = wordList[i].size()
(字串長度)- 建字串表: $\mathcal{O}(N)$
- 建圖: $\mathcal{O}(N^ \cdot M \cdot N)$
- BFS: $\mathcal{O}(N^2)$ (網狀圖)
- 空間複雜度: $\mathcal{O}(N^ \cdot M \cdot N)$
AC Code#
賞析#
TODO
心得#
一開始跟朋友討論時想複雜了= = (inspired by 祥恩),後來看題解才知道有更簡單的解法