public:
vector<string> next(string &s,unordered_set<string> &dict)
{
vector<string>result;
string temp=s;
int len = temp.size();
// unordered_set<string>::iterator iter;
for(int i=0;i<len;i++)
{
for(char j='a';j<='z';j++)
{
if(temp[i]==j) continue;
swap(temp[i],j);
if(dict.count(temp)!=0&&set1.find(temp)==set1.end())
{
result.push_back(temp);
set1.insert(temp);
}
swap(temp[i],j);
}
}
return result;
}
// vector<string>path;
set<string>set1;
vector<vector<string> > findLadders(string start, string end, unordered_set<string> &dict) {
vector<string>path1;
vector<vector<string>> result;
if(start.size()==1)
{path1.push_back(start);
path1.push_back(end);
result.push_back(path1);
return result;
}
//set<string>set1;
// end1=end;
set1.insert(start);
// path.push_back(start);
path1.push_back(start);
dfs(start,end,dict,result,path1);
//for(int i=0;i<result.size;i++)
return result;
}
void dfs(string s,string end,unordered_set<string> &dict,vector<vector<string>> &result,vector<string>path1)
{
vector<string>next1;
vector<string>::iterator iter;
next1=next(s,dict);
for(iter=next1.begin();iter!=next1.end();iter++)
{
if(*iter==end)
{
path1.push_back(*iter);
if(!result.empty()&&path1.size()<result[0].size())
{
result.clear();
result.push_back(path1);
}
if(result.empty()||path1.size()<=result[0].size())
result.push_back(path1);
//result.push_back(path1);
set1.erase(end);
// for(iter=path1.begin();iter!=path1.end();iter++)
// set1.erase(*(iter));
path1.pop_back();
string temp1=path1.back();
set1.erase(temp1);
return;
}
path1.push_back(*iter);
dfs(*iter,end,dict,result,path1);
//string temp2=path1.back();
path1.pop_back();
//set1.erase(temp2);
}
}
}; 有点问题
超时版本
class Solution {
public:
vector<string> next(string &s,unordered_set<string> &dict)
{
vector<string>result;
string temp=s;
int len = temp.size();
// unordered_set<string>::iterator iter;
for(int i=0;i<len;i++)
{
for(char j='a';j<='z';j++)
{
if(temp[i]==j) continue;
swap(temp[i],j);
if(dict.count(temp)!=0&&set1.find(temp)==set1.end())
{
result.push_back(temp);
set1.insert(temp);
}
swap(temp[i],j);
}
}
return result;
}
// vector<string>path;
set<string>set1;
vector<vector<string> > findLadders(string start, string end, unordered_set<string> &dict) {
//set<string>set1;
vector<string>path1;
vector<vector<string>> result;
// end1=end;
set1.insert(start);
// path.push_back(start);
path1.push_back(start);
dfs(start,end,dict,result,path1);
return result;
}
void dfs(string s,string end,unordered_set<string> &dict,vector<vector<string>> &result,vector<string>path1)
{
vector<string>next1;
vector<string>::iterator iter;
next1=next(s,dict);
for(iter=next1.begin();iter!=next1.end();iter++)
{
if(*iter==end)
{
path1.push_back(*iter);
result.push_back(path1);
set1.erase(end);
while(iter!=next1.end())
{
set1.erase(*(iter++));
}
for(iter=path1.begin();iter!=path1.end();iter++)
set1.erase(*(iter));
path1.pop_back();
return;
}
path1.push_back(*iter);
dfs(*iter,end,dict,result,path1);
path1.pop_back();
}
}
};