127. Word Ladder

JJ·2021년 2월 12일
0

Algorithms

목록 보기
104/114
class Solution {
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
        Queue<String> q = new LinkedList<String>();
        Set<String> words = new HashSet<String>(wordList);
        
        words.remove(beginWord);
        q.add(beginWord);
        int level = 0;
        
        while (!q.isEmpty()) {
            int size = q.size();
            level++;
            
            for (int i = 0; i < size; i++) {
                String currentWord = q.poll();
                if (currentWord.equals(endWord)) return level;
            
                List<String> neighbors = neighbors(currentWord);
            
                for (String n : neighbors) {
                    if (words.contains(n)) {
                        words.remove(n);
                        q.add(n);
                    }
                }
            }
        
        }
        
        return 0;
    }
    
    public List<String> neighbors(String s) {
        char[] chars = s.toCharArray();
        List<String> result = new ArrayList<String>();
        for (int i = 0; i < chars.length; i++) {
            char temp = chars[i];
            for (char c = 'a'; c <= 'z'; c++) {
                chars[i] = c;
                String neighbor = new String(chars);
                result.add(neighbor);
            }
            chars[i] = temp;
        }
        return result; 
    }
    
}

Runtime: 78 ms, faster than 54.04% of Java online submissions for Word Ladder.
Memory Usage: 40.4 MB, less than 80.89% of Java online submissions for Word Ladder.

graph 문제

0개의 댓글