LeetCode OJ-- Word Ladder II ***@
2024-09-24 02:11:04
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();
}
}
};
最新文章
- MyBatis 一级缓存与二级缓存
- Jquery 点击按钮将其背景图换成另一张,再次点击恢复默认图片
- 关于scrollWidth,clientWidth,offsetWidth
- Cheatsheet: 2015 06.01 ~ 06.30
- hdu 4381(背包变形)
- Java Concurrency - invokeAny &; invokeAll
- ubuntu 安装软件(apt源)
- Android Fragment详解(四):管理Fragment
- GreenDao教程1
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
- odoo 数据库到期提醒
- 好用的shell可以事半功倍
- 强迫症犯了,忍不住赞一下slf4j包Logger.java的优雅代码
- proc:基本数据库操作
- Java IO笔记
- 做了一个可定制的英文记忆字典 - RDict
- Leetcode 94
- 006PHP文件处理—— 目录操作 删除目录 删除置顶类型文件
- Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述
- Snapdragon connect to android devices
热门文章
- [ActionScript 3.0] AS3.0 将图像的Alpha通道转换为黑白图像(分离ARGB方式)
- SeedDms 文档管理系统安装
- QBC分页查询
- selenium2 WebDriver 在asp.net项目中的应用
- 在c中保存状态
- Linux:永久修改网卡的MAC地址
- angular 的ng-view,ngrouter
- mysql小误区关于set global sql_slave_skip_counter=N命令
- {CSDN}{英雄会}{火车调度}
- JavaWeb总结--Servlet 工作原理解析