[leetcode] Word Ladder
来源:互联网 发布:天敏网络机顶盒价格 编辑:程序博客网 时间:2024/06/18 12:37
Word Ladder
把本题抽象为图模型:节点为length(length为start的长度)位个字母(每个字母有26种可能)的排列组合;若一个节点A通过改变一个字母变化到另外一个节点B(B节点在dict中),则有一条边A--B;否则两节点间没有边。此题可抽象为已知起点和终点,是否可以找到一条最短路径L,使得通过L,可以从起点到达终点。可以使用BFS来解。
#include <iostream>#include <unordered_set>//mac os下引用unordered_set,散列容器#include <string>#include <queue>using namespace std;class Solution {public: int ladderLength(string start, string end, unordered_set<string> &dict) { if (start==end) { return 1; } queue<string> nodes;//使用queue容器 queue<int> depth; nodes.push(start);//start入队列 depth.push(1);//1入队 findItem(start, dict);//查看是否存在于字典中 while (nodes.size()>0) {//遍历每一个单词 string cur=nodes.front();//访问队首元素 nodes.pop();//队列的第一个元素出队列 int dep=depth.front();//步数初始为1 depth.pop(); for (int i=0; i<cur.size(); i++) {//改变单词的字母 for (int j=0; j<26; j++) {//26个英文字母 if (cur[i]!='a'+j) { string temp=cur; temp[i]='a'+j; if (temp==end) { return dep+1;//可以转换为end,需要dep+1步 } if (findItem(temp, dict)) { nodes.push(temp); depth.push(dep+1); } } } } } return 0; } bool findItem(string ts,unordered_set<string> &dict){ //const_iterator:常数的迭代器类型的控制序列的 //find:查找与指定键匹配的元素 unordered_set<string>::const_iterator ci=dict.find(ts); if (ci!=dict.end()) {//找到了 dict.erase(ci);//移除指定位置处的元素 return true; }else{ return false;//没找到 } return true; }};int main(){ string start = "hit"; string end = "cog"; unordered_set<string> dict = {"hot","dot","dog","lot","log"}; Solution so; int res=so.ladderLength(start, end, dict); cout<<res<<endl; return 0;}
Solution2
class Solution {public: int ladderLength(string start, string end, unordered_set<string> &dict) { if (start==end) { return 1; } queue<string> nodes; nodes.push(start); queue<int> depth; depth.push(1); findItem(start, dict); while (!nodes.empty()) { string cur=nodes.front(); nodes.pop(); int dep=depth.front(); depth.pop(); for (int i=0; i<cur.size(); i++) { for (int j=0; j<26; j++) { string temp=cur; if (temp[i]!='a'+j) { temp[i]='a'+j; if (temp==end) { return dep+1; } if (findItem(temp, dict)) { nodes.push(temp); depth.push(dep+1); } } } } } return 0; } bool findItem(string target,unordered_set<string> &dict){ unordered_set<string>::const_iterator ci= dict.find(target); if (ci!=dict.end()) { dict.erase(ci); return true; }else{ return false; } }};
0 0
- [Leetcode][python]Word Ladder/Word Ladder II
- [Leetcode] Word Ladder
- LeetCode: Word Ladder
- leetcode 84: Word Ladder
- [leetcode] word ladder
- 【leetcode】Word Ladder
- 【leetcode】Word Ladder II
- LeetCode - Word Ladder
- LeetCode之Word Ladder
- [LeetCode]Word Ladder
- [LeetCode]Word Ladder II
- [Leetcode]Word Ladder
- [leetcode]Word Ladder
- [leetcode] Word Ladder
- [leetcode] Word Ladder II
- LeetCode-Word Ladder
- LeetCode- Word Ladder
- LeetCode - Word Ladder II
- OCP-1Z0-051 第127题 LEFT JOIN,RIGHT JOIN,FULL JOIN外连接的用法
- POJ 3624 Charm Bracelet
- AndroidManifest.xml文件详解
- USACO dualpal
- .net中的3个Timer
- [leetcode] Word Ladder
- 内部类
- 教你淘宝店铺如何做推广!
- JPush学习
- 第四周作业
- 不需要提交到svn的文件类型 SVN ignore
- Opengl png 透明
- 第五周作业
- LA 3218 - Find the Border PSLG 平面直线区域划分