Word Ladder II
来源:互联网 发布:ubuntu 用户组 编辑:程序博客网 时间:2024/05/17 17:59
pass the small case
large case TLE
class Solution { vector<string> findNeighbors(unordered_set<string> &dict,string s,unordered_map<string,char> &visited,char s_e,bool &collision){ vector<string> vec; for(int i=0;i<s.length();++i){ for(char c='a';c<='z';++c){ string str=s; if(str[i]!=c){ str[i]=c; if(dict.find(str)!=dict.end()&&!(visited[str]&(s_e<<2))){// vec.push_back(str); if(visited[str]&s_e){ visited[str]|(s_e<<2); }else visited[str]|=s_e; if((visited[str]&3)==3)collision=true; } } } } return vec; }public: vector<vector<string>> findLadders(string start, string end, unordered_set<string> &dict) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<string> > tmp,ret; vector<string> start_list,end_list; vector<string> vec_start,vec_end,vec_tmp1,vec_tmp2,vec_tmp; queue<vector<string> > start_que,end_que,new_sque,new_eque; start_que.push(vector<string>(1,start)); end_que.push(vector<string>(1,end)); unordered_map<string,char> visited; visited[start]=1; visited[end]=2; while(!start_que.empty()&&!end_que.empty()){ bool collision=false; queue<vector<string> > new_sq ; while(!start_que.empty()){ vec_start = start_que.front(); start_que.pop(); start_list=findNeighbors(dict,vec_start[vec_start.size()-1],visited,1,collision); for(int i=0;i<start_list.size();++i){ vec_start.push_back(start_list[i]); new_sq.push(vec_start); vec_start.pop_back(); } } if(collision){ new_sque=new_sq; new_eque=end_que; break; } queue<vector<string> > new_eq ; while(!end_que.empty()){ vec_end = end_que.front(); end_que.pop(); end_list=findNeighbors(dict,vec_end[vec_end.size()-1],visited,2,collision); for(int i=0;i<end_list.size();++i){ vec_end.push_back(end_list[i]); new_eq.push(vec_end); vec_end.pop_back(); } } if(collision){ new_sque=new_sq; new_eque=new_eq; break; } start_que=new_sq; end_que=new_eq; } while(!new_sque.empty()){ tmp.push_back(new_sque.front()); new_sque.pop(); } while(!new_eque.empty()){ vec_tmp1=new_eque.front(); string laststr_s=vec_tmp1[vec_tmp1.size()-1]; new_eque.pop(); if((visited[laststr_s]&3)==3){ for(int i=0;i<tmp.size();++i){ vec_tmp2=tmp[i]; string laststr_e=vec_tmp2[vec_tmp2.size()-1]; if(laststr_s==laststr_e){ vec_tmp=vec_tmp2; vec_tmp.pop_back(); vec_tmp.insert(vec_tmp.end(),vec_tmp1.rbegin(),vec_tmp1.rend()); ret.push_back(vec_tmp); } } } } return ret; }};
- Word Ladder/ Word Ladder II
- Word Ladder II
- Word Ladder II
- 【leetcode】Word Ladder II
- [LeetCode]Word Ladder II
- Word Ladder II
- [leetcode] Word Ladder II
- LeetCode - Word Ladder II
- Word Ladder II
- Leetcode: Word Ladder II
- leetcode Word Ladder II
- Leetcode Word Ladder II
- LeetCode | Word Ladder II
- Word Ladder II
- Word Ladder II
- Word Ladder II
- leetcode word ladder II
- 【Leetcode】Word Ladder II
- jsop中的select()的使用
- C 语言实现linux读取和修改IP地址
- Xcode安装cocos2d
- 安装提示错误 [INSTALL_FAILED_OLDER_SDK]的解决方案
- socket与HTTP的区别
- Word Ladder II
- 嗯,最近过的好么
- STL模板类的继承
- Android之ListView性能优化
- 设计一个Cache系统
- SVN分支和合并问题专家在线讲解
- container_of 理解
- 微信公众平台申请消息接口验证工具
- RAC11.2G 节点删除