(BFS 图的遍历的升级版) leetcode 127. Word Ladder

mac2022-06-30  74

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.

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.

Example 1:

Input: beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"] Output: 5 Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog", return its length 5.

Example 2:

Input: beginWord = "hit" endWord = "cog" wordList = ["hot","dot","dog","lot","log"] Output: 0 Explanation: The endWord "cog" is not in wordList, therefore no possible transformation.

----------------------------------------------------------------------------------------------------------------------

我发现我现在实力很弱,得更加努力了。

这个题是说的就是把一个字符串改变其中一个字符,并且保证改变后的字符串再给定的一个字典上有,然后,如果最后改得到的字符串时符合要求的字符串,统计改变的次数,否则返回0. 和图的遍历类似,只是每次要遍历26个字符,用BFS最合适。

参考链接:http://www.cnblogs.com/grandyang/p/4539768.html(强烈推荐这个大佬)

C++代码:

class Solution { public: int ladderLength(string beginWord, string endWord, vector<string>& wordList) { unordered_set<string> wordset(wordList.begin(),wordList.end()); //建立一个字典。 if(!wordset.count(endWord)) return 0; //如果endWord不在字典上,那无论改多少次,都不能得到这个字符串。 queue<string> q; q.push(beginWord); int res = 0; while(!q.empty()){ for(int k = q.size(); k > 0; k--){ string word = q.front(); q.pop(); if(word == endWord) return res + 1; for(int i = 0; i < word.size(); i++){ string newword = word; for(char ch = 'a'; ch <= 'z';ch++){ newword[i] = ch; if(wordset.count(newword) && newword!=word){ q.push(newword); wordset.erase(newword); //由于转变后得到的字符串不能与前面的相同,所以得在字典上删除相应的字符串。 } } } } ++res; } return 0; } };

 

转载于:https://www.cnblogs.com/Weixu-Liu/p/10812885.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)