要求:从begin转到end,转换只能用字典里单次包括end,相差一个字母可转,求转换序列长度
思路:bfs,记录访问过的,题目要求长度其实相当于最短路径,相对简单的思路,还可以用双向bfs优化,建图免得判断相差一个字符空间换时间啥的,懒得搞了反正没超时
class Solution {
public:
bool canconvert(string &s,string &t){
int n=s.size();
int diff=0;
for(int i=0;i<n;++i)
if(s[i]!=t[i])++diff;
return diff==1;
}
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
int wn=wordList.size();
vector<int> visited(wn);
queue<string> q;
q.push(beginWord);
int level=0;
while(!q.empty()){
int levelsize=q.size();
++level;
while(levelsize--){
string tmp=q.front();
q.pop();
if(tmp==endWord)return level;
for(int i=0;i<wn;++i){
if(visited[i]==1)continue;
if(canconvert(tmp,wordList[i])){
q.push(wordList[i]);
visited[i]=1;
}
}
}
}
return 0;
}
};