leetcode127.Word Ladder (单双向BFS)

FFmpeg + OBS 低延迟直播串流实战:从H264裸流到RTP组播的完整配置 本文详细介绍了如何利用FFmpeg将H264裸流转码为RTP协议,并通过组播技术实现与OBS客户端的超低延迟直播串流。文章深入剖析了FFmpeg关键参数调优、SDP文件生成与配置,以及OBS客户端的无缝拉流方法,为需要毫秒级实时交互的场景提供了一套去中心化、高效稳定的完整解决方案。 阅读详情

Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that:

Only one letter can be changed at a time.
Each transformed word must exist in the word list. Note that beginWord is not a transformed word.
Note:

Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
You may assume no duplicates in the word list.
You may assume beginWord and endWord are non-empty and are not the same.
Example 1:

Input:
beginWord = “hit”,
endWord = “cog”,
wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”]

Output: 5

Explanation: As one shortest transformation is “hit” -> “hot” -> “dot” -> “dog” -> “cog”,
return its length 5.

Example 2:

Input:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,“dot”,“dog”,“lot”,“log”]

Output: 0

Explanation: The endWord “cog” is not in wordList, therefore no possible transformation.

给出一个beginWord,一个endWord,和一个wordList
让beginWord中每次变动一个字母后,得是wordList里面的某一个单词,而且单词不能重复使用,问经过几次变动可以变成endWord,返回step数,如果不能达到要求,返回0

思路:
单向BFS 和 双向BFS (参考某大牛的方法)

单向BFS思路:
比如Example1
beginWord = “hit”, 是开始的queue
取出hit,按位从’a’变到’z’,看变动后是否在wordList中,如果在,加入queue作下一level的展开
比如第一位’h’,从’a’到’z’可以变成’ait’, ‘bit’, …, ‘zit’, 发现都不在wordList里
再变第2位’i’,从’a’到’z’可以变成’hat’, ‘hbt’, …, ‘hzt’,其中’hot’在wordList里,加入queue,同时为了避免重复,从wordList中删除’hot’
同理第3位,发现没有

所以下一level的展开对象是’hot’

如此一步一步展开,直到得到endWord,如果所有位都处理完仍没有,返回0

time complexity: O(n * 26len)

双向BFS:
交替展开beginWord和endWord,直到在中间某一点相遇
beginWord的展开存在q1
endWord的展开存在q2
如果中间q1展开的单词存在q2中,则返回step+1

q1, q2中的某一个中间结果都不在wordList中则返回0

trick:
因为是交替展开,每次选q1和q2中较小size的展开,可以节省时间复杂度

注意
List和HashSet的contains方法
因为中间要判断单词是否存在于wordList中,要用到contains方法,
而wordList是List类型,List的contains方法底层实现是for loop,O(n)复杂度
而HashSet的contains底层实现是直接利用key,O(1)复杂度

本题如果直接用List,时间是967ms, 而转成HashSet后是13ms

双向BFS:

//13ms
    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
        HashSet<String> dict = new HashSet<String>(wordList);
        if (!dict.contains(endWord)) {
            return 0;
        }
        
        int len = beginWord.length();
        
        HashSet<String> q1 = new HashSet<String>() {{add(beginWord);}};
        HashSet<String> q2 = new HashSet<String>() {{add(endWord);}};
        
        int step = 0;
        
        while (!q1.isEmpty() && !q2.isEmpty()) {
            step ++;
            
            if (q1.size() > q2.size()) {  //swap q1 and q2..
                HashSet<String> tmp = q2;
                q2 = q1;
                q1 = tmp;
            }
            
            HashSet<String> queue = new HashSet<>();
            
            for (String word : q1) {
                char[] cWord = word.toCharArray();
                for (int i = 0; i < len; i++) {
                    char before = cWord[i];
                    
                    for (char c = 'a'; c <= 'z'; c++) {
                        cWord[i] = c;
                        String changed = String.valueOf(cWord);
                        
                        if (q2.contains(changed)) {
                            return step + 1;
                        }
                        
                        if (dict.contains(changed)) {
                            queue.add(changed);
                            dict.remove(changed);
                        }
                        
                    }
                    
                    cWord[i] = before;
                }
            }
            
            q1 = queue;
        }
        
        return 0;
    }
数据分享|1961-2017年中国0.25°×0.25° 逐日地表水文数据集(VIC-CN05.1) 其中,全球径流中心(University of New Hampshire and Global Runoff Data Centre, UNH/GRDC)的复合产流场集成了观测的河道径流和水量平衡模式模拟的地表和地下径流,常被用来评估模拟的径流。在长白山、海北灌丛和千烟洲通量站,模拟与观测的逐月潜热通量的平均NSE为0.61。VIC-CN05.1受益于较准确的大气驱动场、先进的地表水文参数化方案以及更真实丰富的土壤信息,可作为中国水文气象研究的参照数据,用于陆面模式的评估和长期的趋势分析等。 阅读详情

相关推荐

单细胞测序数据整合

基于Seurat 联合harmony进行单细胞数据整合分析

G2530051386的博客 9789

c++八数码难题全家桶(A*算法、双向BFS、BFS、DFS)

本文用C++实现了八数码问题,详尽四种经典算法:A*算法、双向BFS、BFS、DFS,有被八数码问题困扰的uu们,抓紧时间,进入正文,一定会对你有所帮助!

qq_54893805的博客 5173

手把手教你用U盘给海信IP501H刷机:GK6323V100C芯片的4.4.2和9.0固件实战

本文详细介绍了海信IP501H电视盒子基于GK6323V100C芯片的刷机实战指南,涵盖Android 4.4.2强刷和Android 9.0免拆刷机两种方案。从工具准备、短接操作到ADB调试,提供全流程解析和常见问题解决方案,帮助用户安全高效地完成刷机操作。

lemon的博客 1454

C++ 双向广度搜索,嚯嚯!不就是双指针理念吗

在线性数据结构中搜索时,常使用线性搜索算法,但其性能偏低下,其性能改善方案常有二分搜索和双指针或多指针搜索算法。在复杂的数据结构如树和图中,常规搜索算法是深度和广度搜索。在深度搜索算法过程中常借助剪枝或记忆化方案提升搜索性能。广度搜索算法过程中常见的性能优化方案为双向广度搜索和启发式搜索。双向广度搜索可以认为是图论中的双指针搜索方案,本文将和大家深入探讨其算法细节。图中常见的操作为最短路径查找。如在下面的无向无权重图中查找节点1到节点6之间的最短路径,可以直接使用广度搜索算法找到。//邻接矩阵。

y6123236的专栏 1380

SAP SD科目确定:从配置到凭证的财务集成核心

本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。

weixin_33491377的博客 251

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1306

C++算法(Acwing)学习(持续更新中)---双向BFS(双向广搜)和A-Star(A*)

A*算法---从起点到终点的最短距离(启发函数)适用于数据范围较大。保证当终点出队时是最小值(但是不保证中间的某个点出队时是最小值)除了存真实距离值外(从起点到当前点的真实距离)还要存一个估计距离(从终点到当前点的估计距离)每次挑一个预测距离+真实距离最短的点扩展。需满足条件---估计的距离<=真实距离(从当前点到终点)基本步骤:(有点像dijkstra(形式上))t<-优先队列的对头(小根堆)dijkstra可看作所有估价为0的A*算法。1.首先将bfs中的队列都换成优先队列。1.BFS 在入队时判重。

m0_74172918的博客 506

【华为OD机试真题 新系统】959、 水库溃坝填补 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025C卷】959、 水库溃坝填补 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华

KJ.JK 2932

【算法每日一练]-双向bfs 篇6 八数码难题(两个解法),噩梦

今天讲一下进阶版的bfs:

m0_69478376的博客 491

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

LPDDR6与LPDDR5 ZQ Calibration技术探讨

LPDDR6与LPDDR5 ZQ Calibration技术探讨

zilan23的博客 1097

双向BFS初步——c++代码分析

我们从广为人知的POJ 2243这道题谈起:题目大意:给定一个起点和一个终点,按骑士的走法(走日字),从起点到终点的最少移动多少次 先看代码:加了注释,然后解释: #include #include #include #include using namespace std; struct knight { int x,y,step; }; in

你那么爱笑,家里人知道吗? 1209

Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR

本篇文章我们将深入了解 Java 语言中的类与对象,探讨构造器、`static`、`final`、包和 JAR 文件。这些概念是面向对象编程的核心,对于理解和掌握 Java 至关重要。

栗筝i的博客 5033

LeetCode - 127. Word Ladder & 126 (BFS)

LeetCode - 127. Word Ladder &amp;amp; 126 (BFS) LeetCode - 127. Word Ladder LeetCode - 126. Word LadderII LeetCode - 127. Word Ladder 题目链接 题目 解析 两种解法: 单向BFS和双向BFS(Bidrectional BFS)。 单向BFS: 首先将wordDic...

zxzxin的博客~ 573

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

[LeetCode Python3] 127. Word Ladder + BFS +双向BFS

127. Word Ladder + BFS +双向BFS 1、BFS from collections import defaultdict class Solution(object): def ladderLength(self, beginWord, endWord, wordList): """ :type beginWord: str :type endWord: str :type wordList: List[str]

xvrixingkong的博客 241

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode 127. Word Ladder(bfs)

题目来源:https://leetcode.com/problems/word-ladder/ 127.Word Ladder Medium Given two words (beginWordandendWord), and a dictionary's word list, find the length of shortest transformation sequence fr...

da_kao_la的博客 246

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode - 解题笔记 - 127 - Word Ladder

Solution 1 实际上是对 0126. Word Ladder II 的变体,不需要返回路径,只需要计算层数。 时间复杂度:O(Nd)O(N^d)O(Nd),其中NNN为wordList的长度,ddd为编辑距离,最坏的搜索范围就是每一层都是全展开,实际会有大量剪枝 空间复杂度:O(dNd)O(dN^d)O(dNd),其中NNN为wordList的长度,ddd为编辑距离,最坏的搜索范围就是每一层都是全展开,实际会有大量剪枝 class Solution { public: int

支锦铭的博客 1276

Leetcode OJ 127 Word Ladder [Medium]

Leetcode OJ 127 Word Ladder   题目描述: Given two words (beginWord and endWord), and adictionary's word list, find the length of shortest transformation sequencefrom beginWord to endWord, such that:

大吱的博客 524

[Lintcode]120. Word Ladder /[Leetcode]127. Word Ladder

120. Word Ladder / 127. Word Ladder 本题难度: Hard/Medium Topic: Data Structure Description Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from sta...

weixin_30932215的博客 150

leetcode 126 Word Ladder II

题目连接 https://leetcode.com/problems/word-ladder-ii/ Word Ladder II Description Given two words (beginWordandendWord), and a dictionary's word list, find all shortest transformation sequenc...

dong12276的博客 314

Leetcode 127. Word Ladder(python+cpp)

Leetcode 127. Word Ladder题目解析: 题目 解析: 这道题目本质上是个无向图的题目,wordlist中每个单词作为一个节点,每个节点之间如果只差一个字母则有边相连。求开始节点到结束节点的最短距离。方法好像挺多的,最快的是双向BFS,但是我这边只提供最简单易懂的单向BFS,双向的方法后面再说吧。 最简单的思路包含三个部分: 第一是一个字典,字典的key为通用的word p...

qq_37821701的博客 488

【Leetcode】127. Word Ladder

题目地址: https://leetcode.com/problems/word-ladder/ 给定两个单词,分别是起始单词和终止单词,再给定一个单词列表,从某个单词出发走一步,可以达到这个单词中某个字母变成另一个字母的单词。问在这种定义下,起始单词至少走多少步会走到终止单词,并且保证所有单词都属于单词列表(起始单词可以不在,终止单词必须在)。如果不存在这样的路径,就返回000。 思路是双向BF...

数学、算法爱好者的博客 325

127. Word Ladder

文章目录1 题目理解2 BFS 1 题目理解 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。 说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 beginWord 和 endWord 是非空的,且二者不相同。 输入:两个单词:beginWord

约定的博客 342

【leetcode】【medium】127. Word Ladder​​​​​​​

127. Word Ladder Given two words (beginWordandendWord), and a dictionary's word list, find the length of shortest transformation sequence frombeginWordtoendWord, such that: Only one letter can ...

lemonade13的博客 241

【重点BFS】LeetCode 127. Word Ladder

Solution1: 利用BFS做但是内存溢出未能AC,还是记录一下 class Solution { public: int ladderLength(string beginWord, string endWord, vector&amp;amp;amp;amp;amp;amp;lt;string&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp; wordList) { if (find(

Allenlzcoder的博客 448

LeetCode[127. Word Ladder] 题解 难度[medium]

C++语言,使用BFS解决word ladder问题

cs_linyf的博客 3173
上一篇: leetcode 119. Pascal‘s Triangle II(杨辉三角II)
下一篇: leetcode 126. Word Ladder II (双向BFS + DFS)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值