亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Leetcode 127. Word Ladder

2019-11-14 09:05:57
字體:
來源:轉載
供稿:網友

Given two Words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that:

Only one letter can be changed at a time. Each transformed word must exist in the word list. Note that beginWord is not a transformed word. For example,

Given: beginWord = “hit” endWord = “cog” wordList = [“hot”,”dot”,”dog”,”lot”,”log”,”cog”] As one shortest transformation is “hit” -> “hot” -> “dot” -> “dog” -> “cog”, return its length 5.

Note: Return 0 if there is no such transformation sequence. All words have the same length. All words contain only lowercase alphabetic characters. You may assume no duplicates in the word list. You may assume beginWord and endWord are non-empty and are not the same. UPDATE (2017/1/20): The wordList parameter had been changed to a list of strings (instead of a set of strings). Please reload the code definition to get the latest changes.

s思路: 1. 看到本題,要找word之間聯系,單詞如果只差一個單詞不同,則認為這兩個單詞有聯系,這么看:這個題就是圖的問題。首先,建模成圖, 這里寫圖片描述 2. 然后這個題,就演變成遍歷圖,找到從hit到log的最短距離。這里用bfs求最小距離。 3. 這道題有兩種實現方式:第一種先把圖建立起來,即:對每個節點找到其neighbor,并對每個節點保存neighbor,然后從開始的位置,一層一層遍歷圖,知道找到結束的位置;第二種是一邊遍歷圖,一邊建立圖,即:首先根據開始的位置,去給定的unordered_set中找到和他相差一個字母的所有string,然后放在queue后面,然后繼續遍歷,從queue中取出一個string,然后有去這個unordered_set中找相差一個字母的所有string,放在queue后面。注意看,整個過程兩個階段是交叉進行的,取一個節點,再找其全部neighbor,然后在取一個節點,再找這個點的neighbor。這個方法和第一種,先全部找到所有節點的neighbor再去遍歷相比,好處很明顯:如果某一個問題總的節點很多,而需要遍歷的節點很少,那么首先對全圖找所有節點neighbor就顯得效率很低,很多節點用不上,但也找了他們的neighbor。所以,一邊遍歷,一邊找neighbor的方法就很高效,動態的按需要去找neighbor! 4. 再上升一下,很多問題都可以因此而得到優化,把一個大問題分解成兩個小問題,簡單粗暴的做法可能就是一個問題解決完全再解決另一個問題,但這樣就導致整個問題的解決過程是靜態的,效率也就低下;相反,如果把解決問題的幾個步驟shuffle,即:交叉進行,或迭代進行,整個解決過程就是動態的,考慮了問題實際復雜情況的一種方式,因此是高效的! 5. 最后,由于是無向圖,所以每個節點的neighbor在找neighbor時又會找到他自身。為了解決這個問題,通常有兩種方法:一種是用一個visited的vector來標志某一個節點是否被訪問,如果已經被訪問,就直接skip;另一個方法是:每次unordered_set中的數據訪問(添加queue)后,就直接刪除,也一樣可以解決問題!觀察這兩個方法,也很有意思。第一種方法是添加輔助的信息來分辨是否訪問過,第二種則是直接刪除訪問過的,這樣留下來的都是沒訪問過的。這一個添加、一個刪除都達到了相同效果,區別是:添加的原因,是assume不能修改原始數據,所以就只有加標志位;刪除的原因,就是破除了這個假設。所以,刪除顯得更高級、更簡潔,不受潛意識的假設影響,或說打破了潛意識的這個假設。 6. 最后的最后,還要啰嗦一下,找neighbor時,簡單粗暴的方法是:把每個string和所有其他的string對比,看是否相差一位,這樣的復雜度就是o(nm)(m為string長度,n為string個數)。這樣的方法有啥毛病嗎?肯定有了。試分析如下:首先每個string都是小寫字母,那么給定一個單詞,可能的neighbor只有26m個。更具體的說,一旦給定了string,其neighbor的集合也就隨之而固定,其neighbor就只有在這個集合里選。所以,方法就是每次只讓一位char從a到z枚舉,看這個變化的單詞是否出現在unordered_set,枚舉完所有的26m個可能即可。 7. 上面的方法和簡單粗暴的比,即使思維的革命:簡單粗暴的做法是沒考慮到搜索是在一個有限集合進行,而且這個有限的集合比能看到的集合小。思維革命,就是不能只看眼前看得到的信息,還有看不見的被遮住的信息,比如:26m大小的有限集合!

//方法1:bfs求最短距離,用queue來保存每一層的節點。 class Solution { public:

void findneighbor(unordered_set<string>&ss,string cur,queue<string>&QQ){ for(int i=0;i<cur.size();i++){ char s=cur[i]; for(int j=0;j<26;j++){ cur[i]='a'+j; if(cur[i]==s) continue; if(ss.count(cur)){ qq.push(cur); ss.erase(cur); } } cur[i]=s; }}int ladderLength(string beginWord, string endWord, vector<string>& wordList) { unordered_set<string> ss(wordList.begin(),wordList.end()); ss.insert(beginWord); queue<string> qq; qq.push(beginWord); int level=1; while(!qq.empty()){ int n=qq.size(); for(int i=0;i<n;i++){ string cur=qq.front(); qq.pop(); if(cur==endWord) return level; findneighbor(ss,cur,qq); } level++; } return 0;}

}; “`


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人久久久久久| 国产精品一区二区电影| 欧美在线观看日本一区| 国产国语刺激对白av不卡| 国产日产欧美精品| 久久99精品视频一区97| 91av在线免费观看| 中文字幕日韩专区| 国产精品视频大全| 北条麻妃久久精品| 美日韩精品免费观看视频| 国产欧美日韩综合精品| 日韩精品欧美国产精品忘忧草| 久久久精品日本| 亚洲视频在线观看视频| 欧美性猛交xxxxx免费看| 亚洲九九九在线观看| 在线播放国产一区二区三区| 国产精品爽爽ⅴa在线观看| 日韩精品免费电影| 成人av在线亚洲| 日韩美女av在线免费观看| 成人亚洲综合色就1024| 亚洲欧美综合精品久久成人| 久久伊人91精品综合网站| 最近2019中文字幕一页二页| 一道本无吗dⅴd在线播放一区| 人人澡人人澡人人看欧美| 国语对白做受69| 91社区国产高清| 97精品欧美一区二区三区| 久久国产精品久久久久久久久久| 日韩亚洲精品电影| 欧美日韩性视频在线| 国产精品一区二区三区毛片淫片| 亚洲一品av免费观看| 国产97在线视频| 欧美多人乱p欧美4p久久| 日本国产一区二区三区| 国产精品一区二区三区成人| 欧美亚洲激情视频| 国产精品白嫩初高中害羞小美女| 欧美极品欧美精品欧美视频| 中文字幕成人精品久久不卡| 九九热精品视频在线播放| 亚洲视频国产视频| 久久久视频免费观看| 国产在线拍揄自揄视频不卡99| 国产亚洲在线播放| 久久久久久69| 国产午夜精品全部视频播放| 91精品免费久久久久久久久| 97免费视频在线播放| 亚洲国产精品va在线观看黑人| 疯狂做受xxxx欧美肥白少妇| 日韩动漫免费观看电视剧高清| 欧美激情中文字幕在线| 欧美激情区在线播放| 亚洲国产精品小视频| 青青草原成人在线视频| 精品久久久av| 91美女片黄在线观看游戏| 国产成人精品一区二区三区| 国产精品久久久久久久久久免费| 欧美日韩国产专区| 亚洲精品免费一区二区三区| 欧美最猛性xxxxx免费| 久久高清视频免费| 欧美日韩国产精品| 亚洲精品国产拍免费91在线| 一本一本久久a久久精品牛牛影视| 亚洲一区二区久久久| 亚洲跨种族黑人xxx| 欧美最猛性xxxxx亚洲精品| 欧美精品激情视频| 91美女片黄在线观| 成人在线免费观看视视频| 国产ts人妖一区二区三区| 91九色蝌蚪国产| 日韩在线观看免费高清完整版| 国产精品亚洲一区二区三区| 欧美在线观看一区二区三区| 欧美日韩ab片| 久久久精品一区| 欧美视频专区一二在线观看| 久久久久久av| 91色中文字幕| 色无极亚洲影院| 欧美噜噜久久久xxx| 欧美精品久久久久久久久| 国产精品海角社区在线观看| 国产精品久久久久久久午夜| 91av视频导航| 久久视频在线观看免费| 国产一区欧美二区三区| 欧美中文字幕在线观看| 久久精品电影网站| 欧美极品第一页| 久久亚洲私人国产精品va| 欧美大全免费观看电视剧大泉洋| 亚洲毛片一区二区| 色婷婷综合久久久久中文字幕1| 怡红院精品视频| 日韩av在线免费播放| 欧美日韩爱爱视频| 久久久久久综合网天天| 96精品视频在线| 另类图片亚洲另类| 精品成人国产在线观看男人呻吟| 精品欧美激情精品一区| 国产69精品久久久久9999| 国产精品美女999| 亚洲精品视频久久| 成人久久一区二区三区| 亚洲黄色www| 欧美性猛交xxxx富婆| 亚洲天堂成人在线| 色婷婷av一区二区三区久久| 久久精品久久久久| 91丝袜美腿美女视频网站| 亚洲一二在线观看| 久久久久久这里只有精品| 亚洲精品国产综合久久| 高清一区二区三区日本久| 精品国产成人av| 久久在精品线影院精品国产| 欧美韩国理论所午夜片917电影| 久久91精品国产91久久跳| 久久久久久久成人| 国产欧美一区二区三区视频| 在线午夜精品自拍| 欧美精品videos性欧美| 91九色在线视频| 激情懂色av一区av二区av| 91精品国产91久久久久福利| 久热精品视频在线观看| 日韩欧美精品免费在线| 欧美理论电影在线播放| 亚洲免费视频观看| 神马久久久久久| 97精品视频在线| 另类天堂视频在线观看| 久久久久久国产精品三级玉女聊斋| 欧美大片免费观看在线观看网站推荐| 国产精品亚洲一区二区三区| 日韩电影视频免费| 国产精品第三页| 久久夜色精品亚洲噜噜国产mv| 亚洲精品日韩在线| 国产69精品99久久久久久宅男| 日韩免费高清在线观看| 国产偷亚洲偷欧美偷精品| 亚洲人成网站在线播| 日韩精品免费在线视频| 欧美在线观看网址综合| 日韩欧美亚洲综合| 国产免费久久av| 成人精品视频99在线观看免费| 疯狂欧美牲乱大交777| 亚洲第一免费播放区| 色偷偷偷亚洲综合网另类| 日韩精品在线观| 国产成人精品a视频一区www| 久久99久久99精品免观看粉嫩|