[leetcode] Word Ladder

来源:互联网 发布:炫踪网络红杉 编辑:程序博客网 时间:2024/06/05 14:09

Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:

  1. Only one letter can be changed at a time
  2. Each intermediate word must exist in the dictionary

For example,

Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]

As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.

Note:

  • Return 0 if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
思路:使用bfs,与求二叉树的最小深度类似

代码:

class Solution {public:    int ladderLength(string start, string end, unordered_set<string> &dict) {        if(start.size()!=end.size()) return 0;        if(start.size()==0) return 1;        int res=1;        queue<string> search;        search.push(start);        search.push("");        while(search.empty()==false){            string str=search.front();            search.pop();            if(str!=""){                int len=str.size();                for(int i=0;i<len;i++){                    char temp=str[i];                    for(char j='a';j<='z';j++){                        if(str[i]==j) continue;                        str[i]=j;                        if(str==end) return res+1;                        if(dict.find(str)!=dict.end()){                            search.push(str);                            dict.erase(str);                        }                    }                    str[i]=temp;                }            }            else if(search.empty()==false){                res++;                search.push("");            }        }        return 0;    }};



0 0