package com.thealgorithms.strings;
import java.util.List;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.HashSet;
class WordLadder {
public static void main(String[] args) {
String beginWord = "hit";
String endWord = "cog";
String words[] = {"hot", "dot", "dog", "lot", "log", "cog"};
List<String> wordList = Arrays.asList(words);
System.out.println("Ladder Length: " + ladderLength(beginWord, endWord, wordList));
}
public static int ladderLength(String beginWord, String endWord, List<String> wordList) {
HashSet<String> set = new HashSet();
for (String word : wordList) {
set.add(word);
}
if (!set.contains(endWord)) {
return 0;
}
Queue<String> queue = new LinkedList();
queue.offer(beginWord);
int level = 1;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
String curr = queue.poll();
char[] words_chars = curr.toCharArray();
for (int j = 0; j < words_chars.length; j++) {
char original_chars = words_chars[j];
for (char c = 'a'; c <= 'z'; c++) {
if (words_chars[j] == c) {
continue;
}
words_chars[j] = c;
String new_word = String.valueOf(words_chars);
if (new_word.equals(endWord)) {
return level + 1;
}
if (set.contains(new_word)) {
set.remove(new_word);
queue.offer(new_word);
}
}
words_chars[j] = original_chars;
}
}
level++;
}
return 0;
}
}

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69