单词接龙_最小基因变化

举报
bug郭 发表于 2022/08/28 08:01:42 2022/08/28
【摘要】 单词接龙单词接龙class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { if(!wordList.contains(endWord)){ //endWord不在字典中,直接返回 0; ...

单词接龙

单词接龙

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;
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。