LeetCode 126. Word Ladder

BFS遍历即可,其中有个trick是dict.insert(end), 将end加入到dict中,这样不用到最后再特判。

另外感觉有点赖皮的是:

对于每个字符串,每次只变换它个一个字母,看这个新串是否在dict中,这样就可以AC;

但如果对于每个字符串,直接去遍历dict中的每个字符串,判断这两个字符串只相差两个字母,那么这样会TLE.

个人感觉这完全只是因为case中的字符串比较短,dict比较大;如果是字符串很长,dict比较短,那么反而应该用第二种方法。

是我想错了,还是这题就是这么无聊:P


代码:

class Solution 
{
public:
    int ladderLength(string start, string end, unordered_set<string> &dict) 
    {
        map<string, int> dis;
        queue<string> q;        
        dis[start] = 1;
        q.push(start);

        dict.insert(end);
        while (q.empty() == false)
        {
            string cur = q.front();
            for (size_t i = 0; i < cur.size(); ++ i)
            {
                for (int j = 0; j < 26; ++ j)
                {
                    string tmp = cur;
                    tmp[i] = 'a' + j;
                    if (dict.find(tmp)!=dict.end()
                        && dis.find(tmp)==dis.end())
                    {
                        dis[tmp] = dis[cur] + 1;
                        q.push(tmp);
                    }
                }
            }
            q.pop();
        }

        return dis[end];
    }
};


你可能感兴趣的:(LeetCode,bfs)