赞
踩
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:
每次转换只能改变一个字母。
转换过程中的中间单词必须是字典中的单词。
说明:
class Solution { public: unordered_map<string,int> word_id; vector<vector<int>> edge; int wordNum=0;//新标准下可以初始化 void addWord(string word) { if(!word_id.count(word)) { word_id[word]=wordNum++; edge.emplace_back();//在edge中添加一个vector<int>占位 } } void addEdge(string word) { addWord(word); int idx1=word_id[word]; for(auto& ch : word) { char tmp=ch; ch='*'; addWord(word); int idx2=word_id[word]; edge[idx1].push_back(idx2); edge[idx2].push_back(idx1); ch=tmp; } } int ladderLength(string beginWord, string endWord, vector<string>& wordList) { for(auto& word : wordList) addEdge(word); addEdge(beginWord); if(!word_id.count(endWord)) return 0; int beginId=word_id[beginWord]; int endId=word_id[endWord]; vector<int> dis(wordNum,INT_MAX);//储存距离 dis[beginId]=0; queue<int> my_queue; my_queue.push(beginId); while(!my_queue.empty()) { int currentId=my_queue.front(); my_queue.pop(); if(currentId==endId) { return dis[currentId]/2+1; } for(auto& id : edge[currentId]) { if(dis[id]==INT_MAX) { dis[id]=dis[currentId]+1; my_queue.push(id); } } } return 0; } };
运行效果:
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/word-ladder
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。