/*
回头在写吧 一直在研究为什么超时 最后发现 list搜索时间太长 转成set 就好了;
*/
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
if(beginWord.equals(endWord)) return 1;
if(wordList ==null || wordList.size() == 0) return 0;
Set<String> dict = new HashSet<>();
//重要 把list转成hashset 让搜索的时间变短 不然超时
for(String s : wordList) {
dict.add(s);
}
Queue<String> q = new LinkedList<>();
Set<String> s = new HashSet<>();
q.offer(beginWord);
s.add(beginWord);
int level = 1;
while(!q.isEmpty()) {
int size = q.size();
for(int i = 0; i < size; i++) {
String head = q.poll();
if(head.equals(endWord)) {
return level;
}
List<String> temp = findNextString(head, dict);
for(int j = 0; j < temp.size(); j++) {
if(s.contains(temp.get(j))) {
continue;
}
if(temp.get(j).equals(endWord)) {
return level + 1;
}
s.add(temp.get(j));
q.offer(temp.get(j));
}
}
level++;
}
return 0;
}
private List<String> findNextString(String s, Set<String> wordList) {
List<String> result = new ArrayList<>();
for(int i = 0; i < s.length(); i++) {
char[] ch = s.toCharArray();
for(char c = 'a'; c <= 'z'; c++) {
if(ch[i] == c) {
continue;
}
ch[i] = c;
String temp = new String(ch);
if(wordList.contains(temp)) {
result.add(temp);
}
}
}
return result;
}
}
Word Ladder
最新推荐文章于 2022-02-07 22:27:20 发布