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

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

Leetcode 127. Word Ladder

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

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在线播放| 久久不射热爱视频精品| 国产亚洲精品成人av久久ww| 国产精品综合不卡av| 最新中文字幕亚洲| 亚洲春色另类小说| 欧美成人亚洲成人| 国产不卡精品视男人的天堂| 亲爱的老师9免费观看全集电视剧| 精品免费在线视频| 亚洲精品一区二区三区不| 日韩精品小视频| 亚洲精品98久久久久久中文字幕| 欧美日韩国产一区在线| 亚洲欧洲中文天堂| 97免费视频在线| 欧美大片第1页| 欧美电影在线观看网站| 国产精品成人va在线观看| 国产成人精品在线观看| 欧美寡妇偷汉性猛交| 国产精品视频xxxx| 亚洲精品永久免费| 亚洲视屏在线播放| 国产精品扒开腿做爽爽爽的视频| 91国自产精品中文字幕亚洲| 精品久久久久久久中文字幕| 亚洲一区二区三区在线视频| 成人国产亚洲精品a区天堂华泰| 国产欧美一区二区三区久久| 国产va免费精品高清在线观看| 亚洲少妇中文在线| 精品亚洲精品福利线在观看| 日韩在线播放视频| 亚洲a级在线播放观看| 亚洲一区二区在线播放| 亚洲精品国产品国语在线| 日韩专区在线播放| 欧美色道久久88综合亚洲精品| 久久久久久伊人| 91网站在线免费观看| 国产成人精品在线| 国产精品va在线播放我和闺蜜| 在线观看欧美日韩国产| 国产精品久久久久久久久粉嫩av| 久久伊人色综合| 国产精品入口夜色视频大尺度| 亚洲欧洲一区二区三区久久| 亚洲天堂免费视频| 国产视频精品在线| 亚洲欧洲在线视频| 538国产精品一区二区在线| 成人日韩在线电影| 日韩中文字幕精品| 日韩精品免费看| 国产精品18久久久久久首页狼| 性欧美长视频免费观看不卡| 亚洲春色另类小说| 欧美伊久线香蕉线新在线| 欧美老少做受xxxx高潮| 久久久国产视频| 人人做人人澡人人爽欧美| 日韩少妇与小伙激情| 欧美片一区二区三区| 亚洲偷熟乱区亚洲香蕉av| 国产精品久久激情| 国产精品欧美日韩久久| 日本久久91av| 91精品国产免费久久久久久| 亚洲高清福利视频| 亚洲人午夜精品免费| 2020国产精品视频| 欧洲永久精品大片ww免费漫画| 国产亚洲精品美女久久久| 国产亚洲视频中文字幕视频| 欧美午夜女人视频在线| 最近中文字幕日韩精品| 久久久久一本一区二区青青蜜月| 国产精品极品尤物在线观看| 亚洲天堂av女优| 欧美日韩亚洲精品内裤| 日韩免费精品视频| 久久综合电影一区| 国产亚洲精品久久| 97人洗澡人人免费公开视频碰碰碰| 国内精品久久久久久| 亚洲精品国产电影| 日韩在线播放av| 国产成人精品久久久| 一区二区三区高清国产| 91牛牛免费视频| 欧美有码在线观看视频| 日韩欧美亚洲综合| 久久天天躁日日躁| 亚洲综合中文字幕在线观看| 国产精品一区二区三区在线播放| 亚洲精品wwwww| 美女扒开尿口让男人操亚洲视频网站| 欧美亚洲国产成人精品| 国色天香2019中文字幕在线观看| 色诱女教师一区二区三区| 亚洲精品福利在线| 在线看片第一页欧美| 国产不卡av在线免费观看| 久久6免费高清热精品| 97免费视频在线播放| 色www亚洲国产张柏芝| 国产成人精品免高潮在线观看| 欧美电影免费观看高清完整| 亚洲一区av在线播放| 在线看日韩欧美| 亚洲欧美日韩在线一区| 国产精品6699| 国产精品一区二区久久精品| 中文字幕成人在线| 色综合天天狠天天透天天伊人| 亚洲欧美在线播放| 日韩av在线免费看| 精品视频中文字幕| 国内精品一区二区三区| 欧美噜噜久久久xxx| 亚洲www在线| 日韩中文字幕精品视频| 亚洲国产日韩精品在线| 精品国产区一区二区三区在线观看| 中文字幕欧美精品日韩中文字幕| 国产精品福利小视频| 日本久久久久亚洲中字幕| 久久久久久久久久亚洲| 亚洲视频在线视频| 国产成人精品电影| 欧美色视频日本高清在线观看| 亚洲片av在线| 色爱av美腿丝袜综合粉嫩av| 国产有码在线一区二区视频| 国产日韩欧美一二三区| 成人欧美在线观看| 成人午夜在线影院| 久久天天躁狠狠躁老女人| 亚洲摸下面视频| 亚洲精品有码在线| 欧美特级www| 97福利一区二区| 亚洲毛片在线观看.| 欧美午夜激情在线| 91干在线观看| 91午夜理伦私人影院| 黑人巨大精品欧美一区二区一视频| 久久精品91久久久久久再现| 欧美老女人在线视频| 九九久久国产精品| 欧美理论电影网| 国产日韩欧美在线播放| 在线观看日韩www视频免费| 性欧美长视频免费观看不卡| 91精品在线影院| 国产在线视频2019最新视频| 97香蕉超级碰碰久久免费软件| 88国产精品欧美一区二区三区| 最近2019中文字幕一页二页| 日本成人激情视频| 成人国产精品av| 亚洲精品一区二区三区婷婷月| 91精品国产综合久久香蕉的用户体验|