zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    装饰器模式
    java构建树形节点优化
    excel操作
    回调函数
    网络编程
    小练习-接口发布文章 验证未登录
    requests模块
    try异常处理
    内置函数
    接口-用户登录,返回session
  • 原文地址:https://www.cnblogs.com/forcheryl/p/4491291.html
Copyright © 2011-2022 走看看