当前位置:   article > 正文

leetcode 127. 单词接龙(C++)_单词接龙 c++ 代码

单词接龙 c++ 代码

给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:

  1. 每次转换只能改变一个字母。
  2. 转换过程中的中间单词必须是字典中的单词。

说明:

  • 如果不存在这样的转换序列,返回 0。
  • 所有单词具有相同的长度。
  • 所有单词只由小写字母组成。
  • 字典中不存在重复的单词。
  • 你可以假设 beginWord 和 endWord 是非空的,且二者不相同。

示例 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" 不在字典中,所以无法进行转换。

C++

  1. class Solution {
  2. public:
  3. int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
  4. unordered_set<string> word;
  5. for (auto s : wordList) {
  6. word.insert(s);
  7. }
  8. if (word.find(endWord) == word.end()) {
  9. return 0;
  10. }
  11. queue<string> que;
  12. que.push(beginWord);
  13. unordered_set<string> visited;
  14. visited.insert(beginWord);
  15. int num = 1;
  16. while (!que.empty()) {
  17. int m = que.size();
  18. for (int i = 0; i < m; i++) {
  19. string str = que.front();
  20. que.pop();
  21. if (str == endWord) {
  22. return num;
  23. }
  24. for (int j = 0; j < str.size(); j++) {
  25. string ss = str;
  26. for (int k = 0; k < 26; k++) {
  27. char c = k + 'a';
  28. if (c != str[j]) {
  29. ss[j] = c;
  30. }
  31. if (word.find(ss) != word.end() && visited.find(ss) == visited.end()) {
  32. visited.insert(ss);
  33. que.push(ss);
  34. }
  35. }
  36. }
  37. }
  38. num++;
  39. }
  40. return 0;
  41. }
  42. };

 

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

闽ICP备14008679号