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

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

Leetcode 127. Word Ladder

2019-11-14 10:29:20
字體:
來源:轉載
供稿:網友

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
亚洲精品美女久久久久| 亚洲视频在线免费看| 草民午夜欧美限制a级福利片| 国产高清在线不卡| 欧美一区二粉嫩精品国产一线天| 国产亚洲精品激情久久| 欧美性猛交xxxx黑人| 热久久美女精品天天吊色| 日韩av免费在线| 国产成人aa精品一区在线播放| 亚洲黄色在线观看| 国产成人一区二区| 4k岛国日韩精品**专区| 91美女片黄在线观看游戏| 亚洲美女精品成人在线视频| 欧美激情第三页| 国产精品久久久久7777婷婷| 富二代精品短视频| 精品视频—区二区三区免费| 欧美做受高潮电影o| 欧美激情国内偷拍| 欧美成人免费视频| 亚洲人成电影在线播放| 97碰在线观看| 久久精品国产免费观看| 国产精品一香蕉国产线看观看| 国产中文字幕亚洲| 亚洲国产成人久久综合| 午夜精品在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产丝袜视频一区| 久久亚洲精品网站| 91极品女神在线| 亚洲一区二区国产| 亚洲美女福利视频网站| 国内精品美女av在线播放| 成人精品久久av网站| 成人看片人aa| 久久久国产一区二区三区| 久久99国产精品自在自在app| 国产欧美韩国高清| 91九色蝌蚪国产| 亚洲国产欧美在线成人app| 久久成人精品一区二区三区| 欧美日韩国产在线播放| 久久久噜噜噜久噜久久| 欧美午夜视频在线观看| 亚洲日韩欧美视频| 日韩经典第一页| 精品一区二区三区四区在线| 久久影院资源站| 久久亚洲综合国产精品99麻豆精品福利| 久久视频在线观看免费| 久久99精品国产99久久6尤物| 一二美女精品欧洲| 永久免费毛片在线播放不卡| 国产精品成人aaaaa网站| 日本中文字幕久久看| 韩剧1988在线观看免费完整版| 精品高清美女精品国产区| 久久精品久久久久| 国产精品免费久久久| 中文字幕国内精品| 第一福利永久视频精品| 国产精品成人久久久久| 最近2019年日本中文免费字幕| 久久精品电影网| 久久久国产精品免费| 国产亚洲一区精品| 高跟丝袜一区二区三区| 国产精品久久久久久亚洲影视| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品久久久久久久久久新婚| 亚洲毛片在线看| 欧美xxxx18性欧美| 中文字幕久久久| 久久久黄色av| 欧美日韩中文字幕在线视频| 91精品国产高清久久久久久久久| 在线播放亚洲激情| 91在线无精精品一区二区| 国产精品免费一区豆花| 欧美日韩国产麻豆| 一个色综合导航| 国产日韩欧美夫妻视频在线观看| 92国产精品视频| 亚洲免费小视频| 国产精品成人av在线| 日韩动漫免费观看电视剧高清| 亚洲影院色无极综合| 日韩欧美在线视频日韩欧美在线视频| 国产精品69久久久久| 亚洲性线免费观看视频成熟| 欧美成人一区二区三区电影| 久久久最新网址| 国产欧美精品xxxx另类| 国产在线精品播放| 亚洲欧美999| 欧美中文字幕在线视频| 一区二区三区四区在线观看视频| 亚洲丝袜av一区| 久久97精品久久久久久久不卡| 亚洲精品欧美极品| 欧美亚洲国产精品| 国产拍精品一二三| 久久综合国产精品台湾中文娱乐网| 亚洲精品一区中文| 久久99国产精品久久久久久久久| 欧美精品久久久久久久免费观看| 福利精品视频在线| 久久视频在线免费观看| 国产性猛交xxxx免费看久久| 亚洲午夜性刺激影院| 91久久精品国产91久久| 亚洲欧美三级在线| 日韩精品亚洲视频| 亚洲国产成人在线视频| 91在线视频成人| 精品国产一区二区三区四区在线观看| 国产91免费观看| 日本精品va在线观看| 97人人模人人爽人人喊中文字| 亚洲精品白浆高清久久久久久| 国产成人免费91av在线| 日韩av成人在线| 国产精品福利在线观看网址| 日韩成人av网| 久久视频免费观看| 欧美性生交大片免费| 欧美日韩在线影院| 96精品视频在线| 国产精品免费小视频| 精品久久久久久久久久久| 亚洲精品ady| 欧美电影免费观看电视剧大全| 久久精品国产欧美激情| 国产精品美女午夜av| 亚洲国产成人爱av在线播放| 亚洲国产成人91精品| 国产一区二区三区在线| 久久精品在线视频| 日本免费一区二区三区视频观看| 国内精品美女av在线播放| 欧美片一区二区三区| 欧美性xxxxhd| 欧美精品aaa| 精品亚洲aⅴ在线观看| 欧美一区二区大胆人体摄影专业网站| 欧美性一区二区三区| 日韩精品视频免费| www国产亚洲精品久久网站| 国产不卡一区二区在线播放| www日韩中文字幕在线看| 中文字幕日韩精品在线观看| 久久香蕉频线观| 亚洲电影成人av99爱色| 国产成人av网| 日韩一区在线视频| 亚洲精品中文字幕有码专区| 91av免费观看91av精品在线| 亚洲欧美中文日韩在线| 亚洲福利在线播放| 欧美激情亚洲国产| 91在线播放国产|