【C++刷题】力扣-#243-最短单词距离

ops/2024/10/24 12:32:35/

题目描述

给定一个单词列表 words 和两个单词 word1 和 word2,返回这两个单词在列表中的最短距离。如果 word1 和 word2 是同一个单词,则返回它与自身的最近距离。

示例

示例 1:

输入: words = ["practice", "makes", "perfect", "coding", "makes"], word1 = "makes", word2 = "coding"
输出: 1

示例 2:

输入: words = ["practice", "makes", "perfect", "makes"], word1 = "makes", word2 = "makes"
输出: 2

题解

这个问题可以通过遍历数组并跟踪 word1 和 word2 的最近出现位置来解决。

  1. 初始化:创建两个变量 index1 和 index2 来存储 word1 和 word2 的索引,并将它们初始化为 -1。同时,创建一个变量 minDistance 来存储最小距离,并将其初始化为 ∞。
  2. 遍历数组:遍历单词列表 words。
    ○ 如果当前单词等于 word1,则更新 index1 为当前索引,并更新 minDistance 为 index1 和 index2 之间的距离。
    ○ 如果当前单词等于 word2,则更新 index2 为当前索引,并更新 minDistance 为 index1 和 index2 之间的距离。
    ○ 每次更新 minDistance 时,使用 min(minDistance, abs(index1 - index2)) 来确保它是最小的。
  3. 返回结果:遍历结束后,返回 minDistance。

代码实现

int shortestDistance(vector<string>& words, string word1, string word2) {int index1 = -1, index2 = -1;int minDistance = INT_MAX;for (int i = 0; i < words.size(); i++) {if (words[i] == word1) {index1 = i;if (index2 != -1) {minDistance = min(minDistance, abs(index1 - index2));}}if (words[i] == word2) {index2 = i;if (index1 != -1) {minDistance = min(minDistance, abs(index1 - index2));}}}return minDistance;
}

复杂度分析

● 时间复杂度:O(n),其中 n 是单词列表 words 的长度。我们需要遍历一次列表。
● 空间复杂度:O(1),因为我们只使用了常数个额外变量。
这个算法的优势在于它只需要一次遍历即可找到最短单词距离,且不需要额外的存储空间。


http://www.ppmy.cn/ops/127705.html

相关文章

函数模板和类模板

博客ID&#xff1a;LanFuRenC系列专栏&#xff1a;C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 声明等级&#xff1a;黑色->蓝色->红色 欢迎新粉加入&#xff0c;会一直努力提供更优质的编程博客&#xff0c;希望大家三连支持一下啦 目录 1&#xff0…

【系统规划与管理师】历年各章节分值汇总(论文)

【移动端浏览】☞【系统规划与管理师】历年各章节分值汇总&#xff08;论文&#xff09; 第4章 IT服务规划设计 第5章 IT服务部署实施 第6章 IT服务运营管理 第7章 IT服务持续改进 第8章 监督管理 第9章 IT服务营销 第10章 团队建设与管理

新版idea菜单栏展开与合并

新版idea把菜单栏合并了看着很是不习惯&#xff0c;找了半天原来在这里展开 ① 点击文件 -> 设置 ② 点击外观与行为 -> 外观 -> 合并主菜单和窗口标题 然后确定&#xff0c;重启即可

10.22学习

1.求余 在C语言中&#xff0c;求余操作是通过取模运算符 % 来实现的。取模运算符会返回两个数相除后的余数。对于正数和负数的除法&#xff0c;求余的结果会有所不同&#xff0c;但 % 运算符总是返回被除数的符号。 下面是一个简单的例子&#xff0c;展示如何使用 % 运…

KubeSphere

初始密码 Account: admin Password: P88w0rd ansible部署 选一台master 节点 --- - hosts: k8s_mastersbecome: yestasks:- name: Install Gitpackage:name: gitstate: present- name: Download Helmget_url:url: https://get.helm.sh/helm-v3.16.2-linux-amd64.tar.gzdest: …

ansible————task控制

一、loop循环 当某一个操作需要多次执行的时候&#xff0c;就需要用到循环 1、循环语句 安装多个安装包&#xff0c;启动多个应用 [rootcontrol ansible_manage]# cat play_book/loop.yaml --- - name: loop exercisehosts: manage1vars_files:- var/loop_var.yamltasks:-…

深入理解计算机系统阅读笔记-第十章

第十章 虚拟存储器 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互&#xff0c;它为每个进程提供了一个大的、一致的、私有地址空间。通过一个很清晰的机制&#xff0c;虚拟存储器 提供了三个重要能力&#xff1a; 1、它将主存看成是一个存储在磁盘…

【数据结构与算法】走进数据结构的“时间胶囊”——栈

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…