127. 单词接龙

 1 class Solution 
 2 {
 3 public:
 4     int ladderLength(string beginWord, string endWord, vector<string>& wordList) 
 5     {
 6         //hash用于去重
 7         unordered_set<string> hash(wordList.begin(),wordList.end());
 8         //如果没有找到endWord,则返回0
 9         if(hash.find(endWord) == hash.end()) return 0;
10 
11         queue<string> q;
12         q.push(beginWord);
13 
14         int num = 0;
15         while(!q.empty())
16         {
17             num += 1;//每一层+1
18             int n = q.size();
19             for(int i = 0;i < n;i ++)//对每一层进行操作
20             {
21                 string item = q.front();//取出队头元素
22                 q.pop();
23 
24                 for(int j = 0;j < item.size();j ++)//对队头元素进行操作
25                 {
26                     char ch = item[j];//备份该元素中的某一个字母
27                     for(char k = 'a';k <= 'z';k ++)//找出不同位的个数为1
28                     {
29                         item[j] = k;
30                         if(item == endWord) return num + 1;//如果为endWord,返回num+1
31                         if(hash.find(item) != hash.end()) //如果找到了
32                         {
33                             hash.erase(item);//首先删除,防止后面重复
34                             q.push(item);//进入队列中
35                         }
36                     }
37                     item[j] = ch;//该字母复位
38                 }
39             }
40         }
41         return 0;
42     }
43 };

 

posted @ 2020-04-01 22:24  Jinxiaobo0509  阅读(115)  评论(0)    收藏  举报