LeetCode —— Word Ladder

来源:互联网 发布:热血战歌翅膀升阶数据 编辑:程序博客网 时间:2024/06/03 15:45

链接:http://leetcode.com/onlinejudge#question_127

原题:

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,如果直接找set中只差一个字母的单词会超时,但是

遍历字母a~z,然后用hash表的优势,就不会超时了。

代码:

class Solution {public:    int ladderLength(string start, string end, unordered_set<string> &dict) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        dict.insert(start);        dict.insert(end);                dict.erase(start);        queue<pair<string, int> > q;        q.push(pair<string, int>(start, 1));                while (!q.empty()) {            pair<string, int> cur = q.front();            if (cur.first == end)                return cur.second;            q.pop();            for (int n=0; n<(cur.first).size(); n++) {                string word = cur.first;                int stop = word[n] - 'a';                for (int i=(stop+1)%26; i!=stop; i=(i+1)%26) {                    word[n] = 'a' + i;                    if (dict.find(word) != dict.end()) {                        q.push(pair<string, int>(word, cur.second+1));                        dict.erase(word);                    }                }            }        }        return 0;    }};


原创粉丝点击