Word Ladder II?

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) {
        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();
            
           
        
        }
      
       
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值