https://oj.leetcode.com/problems/word-ladder-ii/

啊,终于过了

class Solution {
public:
vector<vector<string> > findLadders(string start, string end, unordered_set<string> &dict) {
vector<vector<string> > ans; if(start.size() == || end.size() == || dict.size() == )
return ans; if(start == end)
{
vector<string> piece;
piece.push_back(start);
ans.push_back(piece);
return ans;
} unordered_map<string, vector<string> > parents; unordered_set<string> current;
current.insert(start);
dict.erase(start); unordered_set<string> next;
bool flagFind = false;
vector<string> lastOnes; // 记录最后一个变换的string
int depth = ; // 记录深度 while(current.size() != && flagFind == false) // flagFind 标记是否已经找到
{
depth++;
// 对于本层的每一个单词
unordered_set<string>::iterator itr;
for(itr = current.begin(); itr != current.end(); itr++)
{
// 对于本单词的每一个位置
for(int index = ; index < start.size(); index++)
{
// 替换成 a~z,并且不等于原单词,并且在dict中存在
for(char ch = 'a'; ch <= 'z'; ch++)
{
string newStr = *itr;
if(newStr[index] != ch) // 换了以后不是原来的那个
{
newStr[index] = ch;
if(newStr == end)
{
lastOnes.push_back( *itr);
flagFind = true;
}
}
else
continue; // 如果变换后在 dict 里面
if(dict.find(newStr) != dict.end())
{
next.insert(newStr);
// record parents
parents[newStr].push_back( *itr);
}
}
}
}
// remove all next strings from dict
for(itr = next.begin(); itr != next.end(); itr++)
dict.erase(*itr); current = next;
next.clear();
}
if(flagFind == true)
{
vector<string> ansPiece;
ansPiece.push_back(end);
buildPath(ans,lastOnes,ansPiece,parents,depth);
}
return ans;
}
void buildPath(vector<vector<string> > &ans,vector<string> &lastOnes, vector<string> &ansPiece, unordered_map<string,vector<string> > &parents,int depth)
{
depth--;
for(int i = ; i < lastOnes.size(); i++)
{
ansPiece.push_back(lastOnes[i]);
if(depth == )
{
vector<string> temp = ansPiece;
reverse(temp.begin(),temp.end());
ans.push_back(temp);
}
else
{
buildPath(ans,parents[lastOnes[i]],ansPiece,parents,depth);
}
ansPiece.pop_back();
}
}
};

LeetCode OJ-- Word Ladder II ***@的更多相关文章

  1. [Leetcode Week5]Word Ladder II

    Word Ladder II 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/word-ladder-ii/description/ Descripti ...

  2. 【leetcode】Word Ladder II

      Word Ladder II Given two words (start and end), and a dictionary, find all shortest transformation ...

  3. Java for LeetCode 126 Word Ladder II 【HARD】

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  4. [LeetCode] 126. Word Ladder II 词语阶梯 II

    Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...

  5. LeetCode 126. Word Ladder II 单词接龙 II(C++/Java)

    题目: Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transfo ...

  6. [LeetCode] 126. Word Ladder II 词语阶梯之二

    Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...

  7. [Leetcode][JAVA] Word Ladder II

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  8. [LeetCode#128]Word Ladder II

    Problem: Given two words (start and end), and a dictionary, find all shortest transformation sequenc ...

  9. LeetCode OJ——Word Ladder

    http://oj.leetcode.com/problems/word-ladder/ 图的最短路径问题,可以用最短路径算法,也可以深搜,也可以广搜. 深搜版本: 第一次写的时候,把sum和visi ...

  10. leetcode 126. Word Ladder II ----- java

    Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...

随机推荐

  1. 关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题

    在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * f ...

  2. java中string stringbuilder stringbuffer 的区别

    1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...

  3. EBS应用服务器启动指南

    1.ssh应用服务器    applprod用户密码:*** 管理脚本在$ADMIN_SCRIPTS_HOME路径下 adstrtal.sh       启动所有服务,命令行为adstrtal.sh ...

  4. iperf3实践

    The basic commands are the same for iperf and iperf3: SAMPLE IPERF/IPERF3 COMMANDS Server: iperf/ipe ...

  5. 'Invalid parameter not satisfying: body'

    afnetwork图片上传的时候出错,出现错误 2015-11-09 15:47:59.086 videoPro[3207:132795] *** Assertion failure in -[AFS ...

  6. 7,SFDC 管理员篇 - 数据模型 - 公式和验证 1

    1,自定义公式 Customize | Your Object | Fields | Add Fields Field SF的公式和Excel的公式差不多,都是支持各种运算和结果 例1,以opport ...

  7. jquery事件合集

    1.在input输入数据时执行的事件(边输入边触发事件) $("input[id='subjectNum']").bind('input propertychange', func ...

  8. 【C#基础】System.Reflection (反射)

    在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System. ...

  9. angular背景图片问题

    如果背景图片是从后台取得的数据,可以按下面的方式使用: ng-style="{'background':'url(http://xxx/{{item.id}})'}" 还需要加上  ...

  10. java学习第10天

    今天,下载了eclipse,终于不用在notepad里面敲了..好高兴=-=.下载安装eclipse就不用说了,去oracle官网下就好了,提醒一下,在所有路径中都不要有中文的出现..很能会有很多奇怪 ...