注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
Word Ladder
public class Solution {
public int ladderLength(String beginWord, String endWord, Set<String> wordList) {
Queue<String> q = new LinkedList<>();
q.add(beginWord);
wordList.remove(beginWord);
int level = 1;
while(!q.isEmpty()){
int size = q.size();
for(int i = 0; i < size; i++){
String s = q.remove();
for(int j = 0; j < s.length(); j++){
for(char c = 'a'; c <= 'z'; c++){
char[] cc = s.toCharArray();//start from the original string
cc[j] = c;
String next = new String(cc);
if(next.equals(endWord)){
return level + 1;
}else if(wordList.contains(next)){
q.add(next);
wordList.remove(next);
}
}
}
}
level++;
}
return 0;
}
}
Word Ladder 2
public class Solution {
HashMap<String, Integer> map = new HashMap<>();
List<List<String>> res = new ArrayList<>();
List<String> list = new ArrayList<>();
public List<List<String>> findLadders(String beginWord, String endWord, Set<String> wordList) {
getDistanceFromBegin(beginWord, endWord, wordList);
helper(beginWord, endWord);
return res;
}
public void helper(String beginWord, String endWord){
if(endWord.equals(beginWord)){
List<String> cur = new ArrayList<>(list);
cur.add(beginWord);
Collections.reverse(cur);
res.add(cur);
return;
}
list.add(endWord);
for(int i = 0; i < endWord.length(); i++){
for(char c = 'a'; c <= 'z'; c++){
char[] cc = endWord.toCharArray();
cc[i] = c;
String pre = new String(cc);
if(map.containsKey(pre) && map.get(pre) + 1 == map.get(endWord)){
helper(beginWord, pre);
}
}
}
list.remove(list.size() - 1);
}
public void getDistanceFromBegin(String beginWord, String endWord, Set<String> wordList){
Queue<String> q = new LinkedList<>();
q.add(beginWord);
wordList.remove(beginWord);
int level = 1;
map.put(beginWord, level);
while(!q.isEmpty()){
int size = q.size();
for(int i = 0; i < size; i++){
String s = q.remove();
for(int j = 0; j < s.length(); j++){
for(char c = 'a'; c <= 'z'; c++){
char[] cc = s.toCharArray();//start from the original string
cc[j] = c;
String next = new String(cc);
if(next.equals(endWord)){
map.put(next, level + 1);
return;
}else if(wordList.contains(next)){
q.add(next);
wordList.remove(next);
map.put(next, level + 1);
}
}
}
}
level++;
}
}
}
|