当前位置:   article > 正文

(每日一练C++)127. 单词接龙_c++单词接龙

c++单词接龙

字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk:

每一对相邻的单词只差一个字母。
 对于 1 <= i <= k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。
sk == endWord
给你两个单词 beginWord 和 endWord 和一个字典 wordList ,返回 从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0 。

 
示例 1:

输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]
输出:5
解释:一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。
示例 2:

输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log"]
输出:0
解释:endWord "cog" 不在字典中,所以无法进行转换。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-ladder
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  1. class Solution {
  2. public:
  3. unordered_map<string, int> wordId;
  4. vector<vector<int>> edge;
  5. int nodeNum = 0;
  6. void addWord(string& word) {
  7. if (!wordId.count(word)) {
  8. wordId[word] = nodeNum++;
  9. edge.emplace_back();
  10. }
  11. }
  12. void addEdge(string& word) {
  13. addWord(word);
  14. int id1 = wordId[word];
  15. for (char& it : word) {
  16. char tmp = it;
  17. it = '*';
  18. addWord(word);
  19. int id2 = wordId[word];
  20. edge[id1].push_back(id2);
  21. edge[id2].push_back(id1);
  22. it = tmp;
  23. }
  24. }
  25. int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
  26. for (string& word : wordList) {
  27. addEdge(word);
  28. }
  29. addEdge(beginWord);
  30. if (!wordId.count(endWord)) {
  31. return 0;
  32. }
  33. vector<int> dis(nodeNum, INT_MAX);
  34. int beginId = wordId[beginWord], endId = wordId[endWord];
  35. dis[beginId] = 0;
  36. queue<int> que;
  37. que.push(beginId);
  38. while (!que.empty()) {
  39. int x = que.front();
  40. que.pop();
  41. if (x == endId) {
  42. return dis[endId] / 2 + 1;
  43. }
  44. for (int& it : edge[x]) {
  45. if (dis[it] == INT_MAX) {
  46. dis[it] = dis[x] + 1;
  47. que.push(it);
  48. }
  49. }
  50. }
  51. return 0;
  52. }
  53. };
  54. 作者:LeetCode-Solution
  55. 链接:https://leetcode-cn.com/problems/word-ladder/solution/dan-ci-jie-long-by-leetcode-solution/
  56. 来源:力扣(LeetCode)
  57. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/144358
推荐阅读
相关标签
  

闽ICP备14008679号