127. Word Ladder 2

本文介绍了一种使用双向广度优先搜索算法解决单词转换问题的方法,该算法能够在给定的单词列表中寻找从一个单词到另一个单词的最短转换路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Solution {
public:
    int ladderLength(string beginWord, string endWord, unordered_set<string>& wordList) {
        int dist=2;
        unordered_set<string> head,tail,*phead,*ptail;
        head.insert(beginWord);
        tail.insert(endWord);
        while(!head.empty()&&!tail.empty())
        {
            if(head.size()<=tail.size())//phead指向较小的set ptail指向较大的set
            {
                phead=&head;
                ptail=&tail;
            }
            else
            {
                phead=&tail;
                ptail=&head;
            }

            unordered_set<string> temp;
            for(auto it=phead->begin();it!=phead->end();it++)//遍历phead中所有元素
            {
                wordList.erase(*it);

                string word=*it;
                for(int i=0;i<word.size();i++)//对于每个元素的所有可能位置尝试只改变一个变量的
                {

                    char letter=word[i];
                    for(int j=0;j<26;j++)
                    {
                        word[i]='a'+j;
                        if(ptail->find(word)!=ptail->end())//在ptail中查找到
                            return dist;
                        if(wordList.find(word)!=wordList.end())
                        {
                            wordList.erase(word);
                            temp.insert(word);
                        }
                    }
                    word[i]=letter;
                }

            }
            swap(*phead,temp);
            dist++;
        }
        return 0;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hebastast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值