美文网首页程序员
力扣 127 单词接龙

力扣 127 单词接龙

作者: zhaojinhui | 来源:发表于2020-10-28 07:37 被阅读0次

题意:给定一个字典和开始str,和结束str,每次换一个字母,问从开始str到结束str的最少转换次数

思路:

  1. 用HashSet把字典加入其中
  2. 用queue记录当前遍历到的字符,开始时把beginWord放进去
  3. 每次从queue里pop出头节点,遍历pop出的str的每一位,并把每一位换成26个字母中的一个,重构字符串,并查看是否在字典中
  4. 如果在就加入queue,并把加入的单词从字典删除,如果该单词是endWord那么返回遍历的层数
  5. 没找到返回0

思想:BFS

复杂度:时间O(n),空间O(n)

class Solution {
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
        HashSet<String> set = new HashSet();
        for(String str: wordList) {
            set.add(str);
        }
        
        Queue<String> q = new LinkedList();
        
        q.add(beginWord);
        
        int level = 1;
        int end = 1;
        int start = 0;
        int res = 1;
        while(!q.isEmpty()) {
            String temp = q.poll();
            start++;
            for(int i=0;i<temp.length();i++) {
                char[] arr = temp.toCharArray();
                char t = arr[i];
                for(int j=0;j<26;j++) {
                    char cur = (char)(j + 'a');
                    if(t != cur) {
                        arr[i] = cur;
                        String st = new String(arr);
                        if(set.contains(st)) {
                            if(endWord.equals(st)){
                                return res+1;
                            }
                            set.remove(st);
                            q.add(st);
                            end++;
                        }
                    }   
                }
            }
            if(start == level) {
                res++;
                level = end;
            }
        }
        return 0;
    }
}

相关文章

网友评论

    本文标题:力扣 127 单词接龙

    本文链接:https://www.haomeiwen.com/subject/ipmmmktx.html