题解 | #牛群最短移动序列#

牛群最短移动序列

https://www.nowcoder.com/practice/6473462e05ac4665baec04caf628abdd

知识点

哈希,遍历

解题思路

使用队列和set,将头字符串放进队列中,将所有字符串数组放进set中。

从队列中取出字符串,遍历字符串中每一个字符,替换成其他字符,如果在set中含有,则将新的字符串再次入队。没遍历完一次队列中的全部字符串,level就加一,找到最终字符串就返回level+1;

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param beginWord string字符串
     * @param endWord string字符串
     * @param wordList string字符串一维数组
     * @return int整型
     */
    public int ladderLength (String beginWord, String endWord, String[] wordList) {
        // write code here
        //将单词数组放进set中
        Set<String> wordSet = new HashSet<>(Arrays.asList(wordList));
        //set中没有最终单词直接false
        if (!wordSet.contains(endWord)) {
            return 0;
        }
        Queue<String> queue = new LinkedList<>();
        queue.offer(beginWord);
        int level = 0; //最终答案层级
        while (!queue.isEmpty()) {
            //要先将size放到变量里,不然变动队列size会改变
            int size = queue.size();
            level++;
            //遍历队列
            for (int i = 0; i < size; i++) {
                String word = queue.poll();
                char[] arr = word.toCharArray();
                //遍历取出的字符串
                for (int j = 0; j < arr.length; j++) {
                    char originalChar = arr[j];
                    //遍历26个字母
                    for (char ch = 'a'; ch <= 'z'; ch++) {
                        if (ch == originalChar) {
                            continue;
                        }
                        arr[j] = ch;
                        //组合成新的字符串
                        String newWord = new String(arr);
                        if (newWord.equals(endWord)) {
                            return level + 1;
                        }
                        //set中含有新字符串入队并移除set中对应字符串
                        if (wordSet.contains(newWord)) {
                            queue.offer(newWord);
                            wordSet.remove(newWord);
                        }
                    }
                    arr[j] = originalChar;
                }
            }
        }
        return 0;
    }
}

全部评论

相关推荐

被普调的六边形战士很高大:项目经历貌似和专业或者求职方向没大关系?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务