Crack LeetCode 之 127. Word Ladder

2024-03-19 02:32
文章标签 leetcode word crack 127 ladder

本文主要是介绍Crack LeetCode 之 127. Word Ladder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://leetcode.com/problems/word-ladder/

本文的解釋部分來自於鏈接,出於學習目的我租了部分整理和修改:https://blog.csdn.net/linhuanmars/article/details/23029973

本題的本質是图,圖的顶点则是每个字符串。因為每次只能改一個字符,所以該字符串的每个字符可能对应的边有25个(26个小写字母减去自己),那么一个字符串可能存在的边是25*L条。接下来我們再检查这些边对应的字符串是否在字典里,以此類推就可以得到一个完整的图的结构。根据题目的要求,等价于求这个图一个顶点到另一个顶点的最短路径,我们用广度优先搜索即可。
該算法中最差情况是把所有长度为L的字符串都掃描一遍,或者把字典中的字符串都掃描一遍,而长度为L的字符串共有26^L,所以时间复杂度是O(min(26^L, size(dict)),空间上需要存储访问情况,也是O(min(26^L, size(dict))。C++代码如下:

class Solution
{
public:int ladderLength(string start, string end, vector<string>& wordList){if(start.empty() || end.empty() || start.length()!=end.length())return 0;list<string> strlist;set<string> visited;set<string> dic;int level= 1;int lastNum = 1;int curNum = 0;strlist.push_back(start);visited.insert(start);for (vector<string>::iterator ite = wordList.begin(); ite!=wordList.end(); ++ite)dic.insert(*ite);while(strlist.empty() == false) {string cur = strlist.front();strlist.pop_front();lastNum--;for(int i=0;i<cur.length();i++) {string charCur = cur;for(char c='a';c<='z';c++) {charCur[i] = c;if( dic.find(charCur)!=dic.end() && visited.find(charCur)==visited.end()) {if(charCur == end)return level+1;curNum++;strlist.push_back(charCur);visited.insert(charCur);}}}if(lastNum==0) {lastNum = curNum;curNum = 0;level++;}}return 0;}
};

Python代码如下:

class Solution:def ladderLength(self, beginWord, endWord, wordList):if not beginWord or not endWord or not wordList:return 0;wordSet = set()for word in wordList:wordSet.add(word)level = 1processedSet = set()curList = [beginWord]while True:level = level + 1nextList = []for curWord in curList:if curWord in processedSet:continuefor i in range(len(curWord)):part1 = curWord[:i]; part2 = curWord[i+1:]for j in 'abcdefghijklmnopqrstuvwxyz':nextword = part1 + j + part2if nextword == curWord:continueif nextword not in wordSet:continueif nextword == endWord:return levelnextList.append(nextword)processedSet.add(curWord)if not nextList:return 0curList = nextListreturn 0

 

这篇关于Crack LeetCode 之 127. Word Ladder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824504

相关文章

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx