題目一 (單詞拼接)
題目鏈接https://leetcode.com/problems/word-ladder/
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
int result = 1;
int pre_number = 1;
int next_number = 0;
boolean[] used = new boolean[wordList.size()];
Queue<String> queue = new LinkedList<String>();
queue.offer(beginWord);
while(!queue.isEmpty()){
String cur = queue.poll();
pre_number--;
for(int i=0;i<wordList.size();i++){
String word = wordList.get(i);
if(!used[i]&&success(word,cur)){
if(endWord.equals(word)){
return ++result;
}
next_number++;
queue.offer(word);
used[i] = true;
}
}
if(pre_number == 0){
result++;
pre_number = next_number;
next_number = 0;
}
}
return 0;
}
public boolean success(String word, String cur){
int diff = 0;
for(int i=0;i<word.length();i++){
if(word.charAt(i)!=(cur.charAt(i))){
diff++;
}
}
return diff==1?true:false;
}
}
爲了減少後續的掃描時間,將使用過的單詞直接從list中刪除即可。
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
int result = 1;
int pre_number = 1;
int next_number = 0;
Queue<String> queue = new LinkedList<String>();
queue.offer(beginWord);
while(!queue.isEmpty()){
String cur = queue.poll();
pre_number--;
for(int i=0;i<wordList.size();i++){
String word = wordList.get(i);
if(success(word,cur)){
if(endWord.equals(word)){
return ++result;
}
next_number++;
queue.offer(word);
wordList.remove(i);
i--;
}
}
if(pre_number == 0){
result++;
pre_number = next_number;
next_number = 0;
}
}
return 0;
}
public boolean success(String word, String cur){
int diff = 0;
for(int i=0;i<word.length();i++){
if(word.charAt(i)!=(cur.charAt(i))){
diff++;
}
}
return diff==1?true:false;
}
}
兩次運行對比(第一個爲刪除單詞,第三個爲利用used數組判斷)