leetcode BFS

1. word ladder

 1 class Solution
 2 {
 3 public:
 4     int ladderLength(string beginWord, string endWord, unordered_set<string> &wordDict)
 5     {
 6         queue<string> q;
 7         q.push(beginWord);
 8         unordered_map<string, int> umap;
 9         umap[beginWord] = 1;
10         for (q.push(beginWord); !q.empty(); q.pop())
11         {//这里用for的好处是这本身是一个模块化的过程:先入队;当队非空时进行循环,同时每个循环结束时都要把当前元素出队。用for不容易遗漏q.pop()。
12             string word = q.front();
13             int step = umap[word] + 1;
14             for (int i = 0; i<word.size(); i++)
15             {
16                 for (char c = 'a'; c <= 'z'; c++)
17                 {
18                     if (word[i] != c)
19                     {
20                         char tmp = word[i];
21                         word[i] = c;
22                         if (word == endWord)//this line should here, not in the if statement below,coz endWord may not be in dict
23                             return step;
24                         if (wordDict.find(word) != wordDict.end() && umap.find(word) == umap.end())
25                         {                        
26                             umap[word] = step;
27                             q.push(word);
28                         }
29                         word[i] = tmp;//don't forget to restore
30                     }
31                 }
32             }
33         }
34         return 0;
35     }
36 };

 

转载于:https://www.cnblogs.com/forcheryl/p/4491291.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值