单词接龙_最小基因变化

单词接龙

单词接龙

image-20220508143121095

image-20220508143011028

class Solution {
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
         if(!wordList.contains(endWord)){
             //endWord不在字典中,直接返回 0;
             return 0;
         }
         int count = 1;
         //将wordList存放在 哈希表中,提供查找效率!
        HashSet<String> wordSet = new HashSet<>();
        for(String x:wordList){
            wordSet.add(x);
        }
        Queue<String> queue = new LinkedList<>();
        queue.offer(beginWord);//初始化队列!
         wordSet.remove(beginWord);
        while (!queue.isEmpty()){
            int size = queue.size();
            boolean flag = false;
            while (size-->0){
                //出队!
                String  poll = queue.poll();
                if(poll.equals(endWord)){
                    //匹配成功!
                    return count;
                }
                StringBuilder ret = new StringBuilder(poll);
                //改变该字符!
                for (int i = 0; i <ret.length(); i++) {
                    //复原该字符串!
                    StringBuilder str = new StringBuilder(ret);
                    for(char j ='a';j<='z';j++){//改变每一个位置的字符!
                        str.setCharAt(i,j);//将i下标的字符改成j!
                        if(wordSet.contains(str.toString())){
                            //如果在字典中,入队!
                            queue.offer(str.toString());
                            //已经使用过就在字典中移除,标记使用过!
                            wordSet.remove(str.toString());
                            flag = true;
                        }
                    }
                }
            }
            if(flag){//进行了一层操作!并且找到了对应的单词转换!
                count++;
            }
        }
        return 0;
    }
}

通过哈希表提供查找效率!

最小基因变化

最小基因变化

image-20220508154244322

class Solution {
    public int minMutation(String start, String end, String[] bank) {
            //ACGT
            //将bank存放在哈希表中,提高查找效率
            HashSet<String> bankSet = new HashSet<>();
            //HashSet<StringBuilder> bankSet = new HashSet<>(); 保存 StringBuilder contains就会匹配失败!
            for(String x:bank){
                bankSet.add(x);
            }
            int count = 0;
            char[] table ={'A','C','G','T'};//参照表!
            //初始化 
            Queue<String> queue = new LinkedList<>();
            queue.offer(start);
            while(!queue.isEmpty()){
                //处理每一层!
                int size = queue.size();
                boolean flag = false;//标记是否改变过!
                while(size-->0){
                    //出队!
                    String str = queue.poll();
                    if(str.equals(end)){//匹配成功!
                        return count;
                    }
                    for(int i = 0;i<str.length();i++){
                        //改变i位置字母!
                        //复原该字符串!
                        StringBuilder ret = new StringBuilder(str);
                        for(int j = 0;j<table.length;j++){
                            ret.setCharAt(i,table[j]);//改变!
                            if(bankSet.contains(ret.toString())){
                                //有效改变!
                                flag = true;
                                //入队!
                                queue.offer(ret.toString());
                                //标记使用过!
                                bankSet.remove(ret.toString());
                            }
                        }
                    }
                }
                //这一层有效改变!
                if(flag){
                    count++;
                }
            }
        return -1;
    }
}
#笔试#
全部评论
优秀的人总是那么优秀
点赞 回复 分享
发布于 2022-08-28 11:54 河南

相关推荐

07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务