单词接龙00

news2024/11/17 7:45:22

题目链接

单词接龙

题目描述

注意点

  • 1 <= beginWord.length <= 10
  • endWord.length == beginWord.length
  • wordList[i].length == beginWord.length
  • beginWord、endWord 和 wordList[i] 由小写英文字母组成
  • wordList 中的所有字符串 互不相同

解答思路

  • 从beginWord开始,广度优先遍历wordList,遍历i次相当于beginWord修改了i个字符,直到找到endWord为止,此时遍历了i次就是从 beginWord 到 endWord 的 最短转换序列 中的 单词数目
  • 在进行广度优先遍历时,可以对单词中的每个字符进行变换,每个字符可以变换为’a’~'z’中的任意一个,如果变换后的字符串在wordList中,则其可以作为下一次广度优先遍历的起始字符串

代码

class Solution {
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
        // 去重
        Set<String> wordSet = new HashSet<>(wordList);
        wordList.remove(beginWord);
        if (wordSet.isEmpty() || !wordSet.contains(endWord)) {
            return 0;
        }
        int res = 1;
        // 存储变更x个字符组成且在wordSet中存在的单词
        Deque<String> deque = new ArrayDeque<>();
        deque.addLast(beginWord);
        // 存储某个word是否被访问过
        Set<String> visited = new HashSet<>();
        while (!deque.isEmpty()) {
            int dequeNum = deque.size();
            // 遍历该层所有字符串,每一层为改变了res个字符后组成的在wordSet中存在的单词
            for (int i = 0; i < dequeNum; i++) {
                boolean findEndWord = changeAllCharToDeque(deque, wordSet, visited, endWord);
                if (findEndWord) {
                    return res + 1;
                }
            }
            res++;
        }
        return 0;
    }

    public boolean changeAllCharToDeque(Deque<String> deque, Set<String> wordSet, Set<String> visited, String endWord) {
        // 遍历某个字符串的所有字符
        char[] charArray = deque.pollFirst().toCharArray();
        for (int j = 0; j < charArray.length; j++) {
            char oldChar = charArray[j];
            // 由'a'-'z'替换字符串某个位置的字符
            for (char c = 'a'; c <= 'z'; c++) {
                if (c == oldChar) {
                    continue;
                }
                charArray[j] = c;
                String newWord = String.valueOf(charArray);
                if (wordSet.contains(newWord)) {
                    if (newWord.equals(endWord)) {
                        return true;
                    }
                    if (!visited.contains(newWord)) {
                        deque.addLast(newWord);
                        visited.add(newWord);
                    }
                }
                // 还原字符串
                charArray[j] = oldChar;
            }
        }
        return false;
    }
}

关键点

  • 广度优先遍历的思想
  • 使用队列存储广度优先遍历时每一层的单词,每一层的单词为改变了i个字符后组成的在wordSet中存在的单词
  • 使用visited存储wordList中的单词是否被访问过,防止重复判断,节省时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1247366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新版灵沐V3.3微信资源类小程序源码支持流量主

源码简介 最新版灵沐V3.3微信资源类小程序源码支持流量主&#xff0c;一套不错的流量主变现资源下载小程序&#xff0c;它支持在微信、QQ和抖音平台上运行。这次更新主要集中在全局UI设计的升级&#xff0c;并依然注重资源下载和激励视频变现的功能。另外&#xff0c;还新增了…

智慧楼宇可视化视频综合管理系统,助力楼宇高效安全运行

随着互联网技术的进步和发展&#xff0c;智能化的楼宇建设也逐步成为人们选择办公场所是否方便的一个重要衡量因素。在智能化楼宇中&#xff0c;安全管理也是重要的一个模块。得益于互联网新兴技术的进步&#xff0c;安防视频监控技术也得到了快速发展并应用在楼宇的安全管理中…

羊大师:强健身体是成功的关键

健康是一项无价的财富&#xff0c;拥有强健的身体是实现人生目标的关键。而如何保持健康并拥有一个强健的身体呢&#xff1f;下面就为大家分享一些有效的健身方法和建议&#xff0c;帮助您达到健美身材的目标。 良好的饮食习惯是形成强健身体的基石。我们要摄入足够的营养物质…

uniapp开发的微信小程序进行代码质量控制,分包+压缩js+组件按需注入等

小程序代码分包的操作请看另外一篇文章&#xff1a;uniapp分包优化&#xff0c;包括分包路由跳转规则-CSDN博客 JS文件压缩&#xff1a;在工具「详情」-「本地设置」中开启「上传代码时自动压缩脚本文件」的设置 代码包&#xff1a;组件 > 启用组件按需注入解决办法 在小程…

如何选择ZK-friendly 哈希函数?

1. 引言 在What’s the deal with hash functions in Zero Knowledge?中&#xff0c;研究了哈希函数对ZKP场景的用途。当前有各种ZK-friendly 哈希函数设计&#xff0c;各有优缺点&#xff0c;且针对不同的性能维度进行了优化&#xff0c;如&#xff1a; MiMCGMiMCPoseidonP…

Instrumentation 是什么?和 ActivityThread 是什么关系?

Instrumentation 可以理解为应用进程管家&#xff0c;ActivityThread 要执行创建或暂停某个 Activity 的操作时&#xff0c;都需要通过 Instrumentation 来进行具体的操作&#xff0c;即回调 Activity 的生命周期。 每一个应用程序只有一个 Instrumentation 对象&#xff0c;每…

ubuntu挂载硬盘方法

1.关闭服务器加上新硬盘 2.启动服务器&#xff0c;以root用户登录 3.查看硬盘信息 fdisk -l4.格式化分区 找到需要分区的目录,并记录分区的uuid&#xff0c;用于后面修改/etc/fstab永久挂载配置文件 mkfs.ext4 /dev/nvme0n1 mkfs.ext4 /dev/nvme1n1 Filesystem UUID: a1c…

修改mysql的密码(每一步都图文解释哦)

当你想要连接本机数据库时&#xff0c;是不是有可能突然忘记了自己的数据库密码? 在此文中&#xff0c;我们来详细解决一下如何去修改自己的数据库密码&#xff0c;并使用Navicat来连接测试 1.停止mysql服务 打开终端&#xff0c;键入命令,将mysql服务先停止掉&#xff0c;…

【正点原子STM32连载】 第六十章 串口IAP实验(Julia分形)实验 摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32F407最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html## 第六十…

手把手用GPT开发小程序全流程!就是这么easy~

大家好&#xff0c;我是五竹。 前段时间用GPT开发了一款小程序:GPT真牛批&#xff01;三天开发一个小程序&#xff0c;三天积累了2000的用户&#xff0c;上周末抽空又接入了流量主&#xff0c;感兴趣的同学可以围观一下。 今天就来带大家走一遍用GPT开发一款小程序的全过程&a…

怎么禁止员工私自修改ip地址

在许多组织中&#xff0c;网络管理员负责配置和管理网络&#xff0c;包括为员工分配静态IP地址。然而&#xff0c;有些员工可能会试图修改这些分配的IP地址&#xff0c;这可能会导致一系列问题&#xff0c;包括网络性能下降、安全风险增加等。 因此&#xff0c;禁止员工私自修…

羊奶加西柚,羊大师教你减少自由基

羊奶加西柚&#xff0c;减少自由基的好处真的是多得数不胜数。无论是从营养角度&#xff0c;还是从健康角度考虑。羊奶富含蛋白质、维生素和矿物质&#xff0c;西柚富含维生素C和抗氧化剂。结合起来&#xff0c;它们可以提供许多健康益处&#xff0c;并为我们的身体抵御自由基的…

轻松搬运!手推小车助力制造企业高效装卸

手推车是一种非常方便高效的搬运工具。它可以帮助我们轻松搬运重物&#xff0c;节省时间和精力。不论是在仓库、工厂、商场还是家庭&#xff0c;手推车都扮演着重要的角色。 在现代物流与生产领域&#xff0c;高效的装卸作业是确保生产流程畅通的重要环节。手推小车作为一种便…

[HCIE] IPSec-VPN (IKE自动模式)

概念&#xff1a; IKE&#xff1a;因特网密钥交换 实验目标&#xff1a;pc1与pc2互通 步骤1&#xff1a;R1与R3配置默认路由 R1&#xff1a; ip route-static 0.0.0.0 0.0.0.0 12.1.1.2 R2&#xff1a; ip route-static 0.0.0.0 0.0.0.0 23.1.1.2 步骤2&#xff1a;配ACL…

如何让大模型更好地完成知识图谱推理?

​ 论文标题&#xff1a; Making Large Language Models Perform Better in Knowledge Graph Completion 论文链接&#xff1a; https://arxiv.org/abs/2310.06671 代码链接&#xff1a;GitHub - zjukg/KoPA: [Paper][Preprint 2023] Making Large Language Models Perform Be…

Intel Software Guard Extensions简介(一)

文章目录 前言一、简介二、enclave相互作用与保护三、enclave生命周期四、数据结构和enclave操作五、enclave page cache六、enclave instructions and intel sgx参考资料 前言 最近开始研究Intel SGX硬件特性&#xff0c;记录下研究过程。 目前安全性主要关注对存储中的静止…

羊大师教你,什么搭配羊奶能够带来全方位的营养?

羊奶作为一种营养价值极高的乳制品&#xff0c;其丰富的营养成分对人体健康有着诸多益处。然而&#xff0c;不同的食物搭配会对羊奶的营养吸收产生不同的影响。为了让大家更好地利用羊奶的营养价值&#xff0c;下面小编羊大师将为大家介绍一些与羊奶搭配的食物&#xff0c;帮助…

代码随想录算法训练营第五十七天|647. 回文子串、516. 最长回文子序列

第九章 动态规划part17 647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是…

【回眸】Tessy单元测试软件使用指南(一)安装篇

安装 在官网上下载安装包&#xff0c;安装完成后打开进入这个界面 注册申请license&#xff1a;在作为服务端的电脑上安装Tessy。安装完成后&#xff0c;启动Tessy会自动生成license服务器的注册码。&#xff08;注册码用于申请试用或永久的license文件&#xff09;这个对于我…

拦截器详解

一、概述 什么是拦截器&#xff1f; 是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。Spring框架中提供的&#xff0c;用来动态拦截控制方法的执行。 到底是干啥用的&#xff1f; 拦截请求用的&#xff0c;在指定的方法调用前后&#xff0c;执行在拦截器中编写的程序 …