126 word Ladder
来源:互联网 发布:nba2017球员数据排名 编辑:程序博客网 时间:2024/05/19 21:40
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) 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 = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]
Return
[ ["hit","hot","dot","dog","cog"], ["hit","hot","lot","log","cog"] ]
Note:
- All words have the same length.
- All words contain only lowercase alphabetic characters.
public class Solution { public List<List<String>> findLadders(String start, String end, Set<String> dict) { List<List<String>> result=new ArrayList<List<String>>(); HashMap<String,Integer> map=ladderLength(start,end,dict); if (map.containsKey(end)==false) return result; int ladderSize=map.get(end); result=getLadders(start,end,map,ladderSize); return result; } public List<List<String>> getLadders(String start, String end, HashMap<String, Integer> map,int ladderSize){ List<List<String>> result=new ArrayList<List<String>>(); List<String> oneStep = new ArrayList<String>(); if(ladderSize==1){ oneStep.add(start); result.add(oneStep); return result; } String temp=""; for(int i=0;i<end.length();i++){ for(int j=0;j<26;j++){ char m=(char)('a'+j); temp=end.substring(0,i)+m+end.substring(i+1); if(map.containsKey(temp)&&map.get(temp)==ladderSize-1){ oneStep.add(temp); } } } for(int i=0;i<oneStep.size();i++){ List<List<String>> tempList=getLadders(start,oneStep.get(i),map,ladderSize-1); for(int j=0;j<tempList.size();j++){ List<String> tempPath=tempList.get(j); tempPath.add(end); result.add(tempPath); } } return result; } public HashMap<String,Integer> ladderLength(String start, String end, Set<String> dict) { HashMap<String,Integer> map=new HashMap<String,Integer>(); Queue<String>q=new LinkedList<String>(); String word="",temp=""; q.add(start); map.put(start,1); int curstep=0; while(q.isEmpty()==false){ word=q.poll(); curstep=map.get(word); if(word.compareTo(end)==0) break; for(int i=0;i<word.length();i++){ for(int j=0;j<26;j++){ char m=(char)('a'+j); temp=word.substring(0,i)+m+word.substring(i+1,word.length()); if(dict.contains(temp)&&!map.containsKey(temp)){ map.put(temp,curstep+1); q.add(temp); } } } } return map; } }
0 0
- LeetCode: Word Ladder [126]
- 126 word Ladder
- [leetcode 126] Word Ladder II
- LeetCode(126) Word Ladder II
- LeetCode 126 Word Ladder II
- leetcode 126: Word Ladder II
- leetcode_c++:Word Ladder II(126)
- leetcode 126 Word Ladder II
- leetcode_c++:Word Ladder II(126)
- LeetCode 126 Word Ladder II
- [Leetcode 126] Word Ladder II
- Word Ladder
- Word Ladder
- word ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- 第三周项目五:数组作数据成员(二)
- ListView 之 ListActivity 2
- Spring学习之IOC
- python __call__ 函数
- LeetCode OJ : Reverse Words in a String
- 126 word Ladder
- Android system properties
- ym——Android酷炫实用的开源框架(UI框架)(终)
- COCOS-Tiled地图编辑器
- iOS 开发,屏幕旋转、旋转屏幕collectionView cell 的自动布局问题
- linux配置java文件
- AFNnetworking快速教程,官方入门教程译
- Strategies and Standards
- 快速排序