[LeetCode127]Word Ladder
2014-06-25 01:11
483 查看
Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
For example,
Given:
start =
end =
dict =
As one shortest transformation is
return its length
Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
Analysis:
queue记录转变过程,对于每个存在于dict中的字符,进行替换。详细见code
Java
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
For example,
Given:
start =
"hit"
end =
"cog"
dict =
["hot","dot","dog","lot","log"]
As one shortest transformation is
"hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length
5.
Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
Analysis:
queue记录转变过程,对于每个存在于dict中的字符,进行替换。详细见code
Java
public class Solution { public int ladderLength(String start, String end, Set<String> dict) { if(start.length()!=end.length()) return 0; if(start.isEmpty() || end.isEmpty()) return 0; Queue<String> path = new LinkedList<>(); path.add(start); int level = 1; int count = 1; dict.remove(start); while(dict.size()>0 &&!path.isEmpty()){ String curword = path.peek(); path.poll(); count--; for(int i=0;i<curword.length();i++){ StringBuffer tmp = new StringBuffer(curword); for(char j='a';j<='z';j++){ if(tmp.charAt(i)==j) continue; tmp.replace(i, i+1, ""+j); if(tmp.toString().equals(end)) return level+1; if(dict.contains(tmp.toString())) path.add(tmp.toString()); dict.remove(tmp.toString()); } } if(count==0){ count = path.size(); level++; } } return 0; } }c++
int ladderLength(string start, string end, unordered_set<string> &dict) { if(start.size() != end.size()) return 0; if(start.empty() || end.empty()) return 0; queue<string> path; path.push(start); int level = 1; int count = 1; dict.erase(start); while(dict.size()>0 && !path.empty()){ string curword = path.front(); path.pop(); count --; for(int i=0; i<curword.size();i++){ string tmp = curword; for(char j='a';j<='z';j++){ if(tmp[i]==j) continue; tmp[i] =j; if(tmp == end) return level+1; if(dict.find(tmp)!=dict.end()) path.push(tmp); dict.erase(tmp); } } if(count ==0){ count = path.size(); level++; } } return 0; }
相关文章推荐
- LeetCode 127. Word Ladder
- [leetcode 127]Word Ladder
- leetcode 127. Word Ladder
- leetcode 127 —— Word Ladder
- LeetCode127 Word Ladder
- [LeetCode 127] Word Ladder
- [LeetCode] 127. Word Ladder
- [leetcode]127. Word Ladder
- leetcode 127. Word Ladder
- LeetCode 127. Word Ladder
- [LeetCode]127.Word Ladder
- LeetCode 127 Word Ladder
- LeetCode 127 Word Ladder
- LeetCode-127.Word Ladder
- Leetcode-127.Word Ladder
- LeetCode 127 Word Ladder
- Leetcode 127. Word Ladder
- 第六周:[Leetcode]127. Word Ladder
- Java for LeetCode 127 Word Ladder
- [LeetCode]题解(python):127-Word Ladder