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

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

Leetcode 127. Word Ladder

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

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
亚洲天堂网站在线观看视频| 久久五月天色综合| 在线精品91av| 亚洲精品永久免费精品| 亚洲永久免费观看| 国产午夜精品理论片a级探花| 日韩免费av一区二区| 久久精品国产精品亚洲| 欧美激情视频网| 97久久精品国产| 91天堂在线观看| 精品久久久久久久久久久久久久| 国产午夜精品一区理论片飘花| 亚洲色无码播放| 亚洲最大激情中文字幕| 亚洲欧洲偷拍精品| 欧美日韩中国免费专区在线看| 国产精品18久久久久久首页狼| 国产精品大陆在线观看| 在线观看欧美视频| 在线播放日韩专区| 日韩中文字幕视频在线观看| 97激碰免费视频| 91精品国产高清久久久久久91| 狠狠躁夜夜躁人人躁婷婷91| 亚洲人成在线一二| 国产一区二区三区久久精品| 日韩欧美成人免费视频| 日韩精品中文在线观看| 日韩亚洲欧美中文在线| 4438全国成人免费| 色777狠狠综合秋免鲁丝| 欧美大片免费观看| 亚洲欧美日韩成人| 日本一欧美一欧美一亚洲视频| 欧美理论电影在线播放| 国产精品视频在线播放| 国产va免费精品高清在线观看| 久久精品国产免费观看| 亚洲精品wwwww| 中文字幕在线看视频国产欧美| 欧美老肥婆性猛交视频| 国产精品露脸av在线| 国产精品久久久久久一区二区| 欧美午夜丰满在线18影院| 亚洲欧美日本另类| 国产成人一区二区三区电影| 欧美在线观看网址综合| 亚洲黄在线观看| 国产精品丝袜高跟| 久久视频国产精品免费视频在线| 午夜精品久久17c| 国内自拍欧美激情| 欧美电影免费看| 国产视频观看一区| 国产精品亚洲网站| 久久影院模特热| 亚洲国产成人精品久久久国产成人一区| 亚洲色图av在线| www.日韩视频| 日韩一二三在线视频播| 欧美激情视频一区二区| 成人美女av在线直播| 黑人与娇小精品av专区| 国产一区二区精品丝袜| 成人久久一区二区| 精品香蕉一区二区三区| 欧美午夜无遮挡| 亚洲图片制服诱惑| 日韩电影中文 亚洲精品乱码| 久久久www成人免费精品| 日韩一区二区三区在线播放| 国产日韩欧美黄色| 国产精品中文字幕在线观看| 欧美中文字幕视频| 久久精品视频在线| 在线观看日韩专区| 国产精品久久久久av免费| 91嫩草在线视频| 91久久在线视频| 亚洲日本aⅴ片在线观看香蕉| 黑人巨大精品欧美一区免费视频| xxxx欧美18另类的高清| 91丝袜美腿美女视频网站| 亚洲女在线观看| 欧美精品999| 亚洲自拍偷拍色片视频| 日本精品免费一区二区三区| 怡红院精品视频| 成人免费视频xnxx.com| 欧美激情xxxx性bbbb| 欧美中文字幕视频在线观看| 精品少妇一区二区30p| 68精品国产免费久久久久久婷婷| 色yeye香蕉凹凸一区二区av| 亚洲国产另类 国产精品国产免费| 国产精品永久免费在线| 日韩在线视频免费观看| 91精品国产综合久久久久久蜜臀| 97在线观看免费高清| 午夜精品美女自拍福到在线| 欧美色欧美亚洲高清在线视频| 亚洲性猛交xxxxwww| 国产成人精品av在线| 国产日韩欧美在线视频观看| www.国产一区| 国产中文日韩欧美| 欧美激情视频网址| 日韩精品中文字幕视频在线| 在线播放日韩av| 久久亚洲国产成人| 欧美成人免费在线观看| 亚洲精品久久久久久久久久久久久| 国产精品久久久久999| 在线性视频日韩欧美| 国产91av在线| 亚洲色图偷窥自拍| 亚洲精品成人久久电影| 91麻豆桃色免费看| 国产午夜精品全部视频播放| 亚洲精品第一国产综合精品| 亚洲剧情一区二区| 成人妇女免费播放久久久| 日韩天堂在线视频| 国产在线999| 国产精品精品视频一区二区三区| 狠狠色狠色综合曰曰| 欧美性在线视频| 中文精品99久久国产香蕉| 国产精品扒开腿做| 亚洲剧情一区二区| 俺也去精品视频在线观看| 亚洲91精品在线| 国产精品成人观看视频国产奇米| 亚洲色图25p| 91视频国产高清| 国产精自产拍久久久久久| 亚洲石原莉奈一区二区在线观看| 欧美亚洲另类激情另类| 日韩有码片在线观看| 久久久久久久久电影| 欧美大片va欧美在线播放| 国产精品网红福利| 亚洲r级在线观看| 亚洲欧美国产制服动漫| 亚洲国产精品悠悠久久琪琪| 精品香蕉在线观看视频一| 国产成人精品在线播放| 国产精品一区二区三| 欧美大人香蕉在线| 国产精品一二区| 久久精品久久久久久| 国产精品视频一区国模私拍| 久久精品一偷一偷国产| 亚洲最大成人在线| 国产一区二区三区免费视频| 性欧美视频videos6一9| 91精品视频在线看| 国产亚洲欧美视频| 色综合久久天天综线观看| 亚洲一区中文字幕在线观看| 欧美电影院免费观看| 国产精品中文字幕在线观看| 5566成人精品视频免费|