leetcode 137单词接龙
直接层序遍历,结果有部分测试样例超时;
class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
//利用二叉树的层序遍历;
if(beginWord.size()!=endWord.size()) return ;
unordered_map<string,int> h;
for(int i=;i<wordList.size();i++){
h[wordList[i]]=;
}
if(h[endWord]==) return ;
int level=;
queue<string> q;
q.push(beginWord); while(!q.empty()){
level++;
int qlen=q.size();
while(qlen--){
string front=q.front();
//cout<<front<<",";
q.pop();
for(int i=;i<wordList.size();i++){
if(h[wordList[i]]==) continue;
if(dis(front,wordList[i])==){
if(wordList[i]==endWord) return level;
q.push(wordList[i]);
h[wordList[i]]=;
}
}
}
//cout<<endl;
}
return ; }
int dis(string w1,string w2){
if(w1.size()!=w2.size()) return ;
int res=;
for(int i=;i<w1.size();i++){
res+=(w1[i]-w2[i]==)?:;
if(res>) return res;
}
return res;
}
};
究其原因,是因为距离计算每次都要调用函数过于复杂,由于两两单词间计算距离,并且计算距离时又需要对每个字母进行遍历,因此timeO(n^2*m)
改变距离的计算,对其做预处理,列出每个单词的状态,比如hog 可列为 *og,h*g,ho*;通过临接表来表示,即一个键值(key)为状态,值(value)为hog,即unordered_map<string,set<string>> m(单词状态,单词列表) 对n个词,每个词m个状态进行检索, time O(mn)级别,
C++代码如下:
class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
//处理边界情况;
if(beginWord.size()!=endWord.size() || wordList.size()== || wordList[].size()==) return ; int lr=wordList.size(),lc=wordList[].size(); //初始化哈希表h,记录访问情况;
unordered_map<string,int> h;
for(int i=;i<lr;i++){
h[wordList[i]]=;
} //预处理:初始化状态表m(状态,单词列表)
unordered_map<string,set<string> > m;
for(int i=;i<lr;i++){
for(int j=;j<lc;j++){
string tmp=wordList[i];
tmp[j]='*';
m[tmp].insert(wordList[i]);
}
} //BFS搜寻最短路径
int level=;
queue<string> q;
q.push(beginWord);
while(!q.empty()){
level++;
int qsize=q.size();
while(qsize--){
string front=q.front();
q.pop();
for(int i=;i<lc;i++){
string state=front;
state[i]='*'; for(string child: m[state]){ if(h[child]==) continue;
//cout<<child<<",";
if(child==endWord) return level;
h[child]=;
q.push(child);
}
}
}
//cout<<endl;
}
return ;
}
};
leetcode 137单词接龙的更多相关文章
- Leetcode 126.单词接龙II
单词接龙II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: 每次转换只能 ...
- Java实现 LeetCode 127 单词接龙
127. 单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字 ...
- Java实现 LeetCode 126 单词接龙 II
126. 单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: ...
- leetcode 127 单词接龙
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字母. 转换过程中的中 ...
- [LeetCode] 126. 单词接龙 II
题目链接 : https://leetcode-cn.com/problems/word-ladder-ii/ 题目描述: 给定两个单词(beginWord 和 endWord)和一个字典 wordL ...
- Leetcode之广度优先搜索(BFS)专题-127. 单词接龙(Word Ladder)
Leetcode之广度优先搜索(BFS)专题-127. 单词接龙(Word Ladder) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...
- LeetCode 126. Word Ladder II 单词接龙 II(C++/Java)
题目: Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transfo ...
- NOIP2000单词接龙[DFS]
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- Noip2000 T3 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
随机推荐
- 服务命令(systemctl的使用)
常用的service与systemctl命令的对比 应用举例: ●start:开启服务 ●stop:停止服务 ●status:参数来查看服务运行情况 ●restart:重新加载服务 应用举例·: #启 ...
- laravel-admin 添加图表 Chartjs
github地址:https://github.com/laravel-admin-extensions/chartjs Installation composer require laravel-a ...
- 在vs上开发linux c++
https://www.cnblogs.com/xylc/p/6533716.html?&from=androidqq https://www.jianshu.com/p/8b51a795cb ...
- linux系统查看某个用户错误登录次数
pam_tally2 --user user_name 查看user_name用户的错误登录次数 pam_tally2 --user user_name --reset 清空user_name用户的错 ...
- 004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决
centos6系统 client1:192.168.1.33 centos7系统 client2:192.168.1.44 centos7系统 master:192.168.1.55 配置服务端mas ...
- (转)shell中括号的特殊用法 linux if多条件判断
一. bash [ ] 单双括号 基本要素: Ø [ ] 两个符号左右都要有空格分隔 Ø 内部操作符与操作变量之间要有空格:如 [ “a” = “b” ] Ø 字符串比较中,&g ...
- SpringBoot项目多模块打包与部署【pom文件问题】
[bean的pom] [user的pom] 特别注意,user模块因为有返回jsp页面和web相关,所以需要加入web依赖. chapter23 com.yuqiyu 1.0.0 4.0.0 com. ...
- 使用Nginx的proxy_cache缓存功能取代Squid[原创]
使用Nginx的proxy_cache缓存功能取代Squid[原创] [文章作者:张宴 本文版本:v1.2 最后修改:2009.01.12 转载请注明原文链接:http://blog.zyan.cc/ ...
- FM算法详解
https://blog.csdn.net/jediael_lu/article/details/77772565 https://blog.csdn.net/bitcarmanlee/article ...
- 织梦dedecms做的网站首页标题篡改跳转赌博网站解决方案
织梦dedecms因其强大功能,简单实用的优点常常被用来做企业网站,程序开源使用的人多了网站漏洞多会有中毒的情况,常见的有一种,首页标题关键词描述被篡改,百度快照收录点击后跳转的赌博网站,怎么解决这个 ...