public class WordConversion {
public int solution(String begin, String target, String[] words) {
int answer = dfs(begin, target, words, new boolean[words.length], Integer.MAX_VALUE, 0);
return answer == Integer.MAX_VALUE ? 0 : answer + 1;
}
private int dfs(String begin, String target, String[] words, boolean[] visit, int min, int cnt) {
for (int i = 0; i < words.length; i++) {
if (!visit[i] && compare(begin, words[i])) {
if (words[i].equals(target)) {
return cnt;
}
visit[i] = true;
min = dfs(words[i], target, words, visit, min, cnt + 1);
}
}
return min;
}
private boolean compare(String str1, String str2) {
int cnt = 0;
for (int i = 0; i < str1.length(); i++) {
if (str1.charAt(i) != str2.charAt(i)) {
cnt++;
}
}
return cnt <= 1;
}
}